【逐步补充中】springboot集成netty中遇到的问题总结

问题1:LengthFieldBasedFrameDecoder解码失败,再次尝试解码

如果无需再次尝试解码,可以在抛错时调用, in.resetReaderIndex();

public class TcpMessageDecoderHandler extends LengthFieldBasedFrameDecoder {private static final Logger logger = LoggerFactory.getLogger(TcpHandleServiceImpl.class);public TcpMessageDecoderHandler(int maxFrameLength, int lengthFieldOffset, int lengthFieldLength, int lengthAdjustment, int initialBytesToStrip) {super(maxFrameLength, lengthFieldOffset, lengthFieldLength, lengthAdjustment, initialBytesToStrip);}@Overrideprotected Object decode(ChannelHandlerContext ctx, ByteBuf in) throws Exception {try {String cmdPayload = null;// JSON内容byte[] cmdLenBytes = new byte[2]; //JSON命令长度 两个字节in.readBytes(cmdLenBytes);int cmdLen = mergeByte2Hex(cmdLenBytes[0], cmdLenBytes[1]);if (in.readableBytes() >= cmdLen) {byte[] cmdPayloadBytes = new byte[cmdLen];in.readBytes(cmdPayloadBytes); // 从输入流中读取JSON内容cmdPayload = new String(cmdPayloadBytes, StandardCharsets.UTF_8); // 转换为字符串}// 字节数据byte[] dataLenBytes = new byte[2]; //字节数据长度 两个字节if (in.readableBytes() >= 2) {in.readBytes(dataLenBytes);} else {return new TcpMessage(cmdPayload);}int dataLen = mergeByte2Hex(dataLenBytes[0], dataLenBytes[1]);byte[] dataPayloadBytes = new byte[0];if (in.readableBytes() >= dataLen) {dataPayloadBytes = new byte[dataLen];in.readBytes(dataPayloadBytes);}return new TcpMessage(cmdPayload, dataPayloadBytes);} catch (Exception e){logger.error("读取字节流出错:" + e.getMessage());// 重置读指针in.resetReaderIndex();return null;}}@Overridepublic void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {logger.error("error:" + cause.getMessage());}/*** 大端格式来读取数据,即先读取高位字节再读取低位字节。* @param high* @param low* @return*/private static int mergeByte2Hex(byte high, byte low) {return ((high & 0xFF) << 8) | (low & 0xFF);}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/66020.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Win11+WLS Ubuntu 鸿蒙开发环境搭建(二)

参考文章 penHarmony南向开发笔记&#xff08;一&#xff09;开发环境搭建 OpenHarmony&#xff08;鸿蒙南向开发&#xff09;——标准系统移植指南&#xff08;一&#xff09; OpenHarmony&#xff08;鸿蒙南向开发&#xff09;——小型系统芯片移植指南&#xff08;二&…

Android图形系统中的PDF渲染:架构、JNI、系统定制与实际应用

Android图形系统中的PDF渲染:架构、JNI、系统定制与实际应用 引言 在移动设备上,PDF文件的渲染与显示是一个常见的需求。Android系统提供了android.graphics.pdf包,用于处理PDF文件的渲染和显示。本文将深入探讨android.graphics.pdf的架构、JNI(Java Native Interface)…

babel-runtime

简介 babel-runtime 是 Babel 的一个核心库&#xff0c;主要用于在运行时提供一些 Babel 转换所需的功能。 作用 代码复用&#xff1a;babel-runtime 提供了常用的辅助函数和 polyfills&#xff0c;避免在每个文件中重复引入这些功能。支持新特性&#xff1a;帮助支持 ES6 特…

ubuntu 使用s3fs配置自动挂载对象存储

一、环境准备 1.有访问对象存储权限的AKSK 2.服务器、对象存储 二、实施步骤 sudo apt update sudo apt install s3fs echo "AK:SK" >/home/ubuntu/.passwd-s3fs ---位置自定义 chmod 600 /home/ubuntu/.passwd-s3fs ---权限必须要有 mkdir /data sudo s3fs …

聚铭网络受邀参加2024年南京市信息技术应用创新产业供需对接会

近日&#xff0c;备受瞩目的2024年南京市信息技术应用创新产业供需对接会&#xff08;‘宁工品推’信创、商用密码专场&#xff09;”在中国&#xff08;南京&#xff09;软件谷云密城圆满举办。聚铭网络作为信创领域的杰出代表厂商&#xff0c;受邀出席本次大会&#xff0c;为…

关于 AWTK 和 Weston 在旋转屏幕时的资源消耗问题

关于 AWTK 和 Weston 在旋转屏幕时的资源消耗问题&#xff0c;首先需要理解这两者旋转的本质区别及其资源开销。 AWTK的屏幕旋转&#xff1a; AWTK旋转的实现方式&#xff1a; AWTK 是一个用户界面工具包&#xff0c;它通过图形渲染系统处理所有控件和窗口的旋转。当你使用 w…

Monolith - 大规模推荐建模的深度学习框架

文章目录 一、关于 Monolith二、快速开始1、从源代码构建2、示例和教程 一、关于 Monolith github : https://github.com/bytedance/monolithDiscord Monolith 是一个用于大规模推荐建模的深度学习框架。它引入了两个对高级推荐系统至关重要的特性&#xff1a; collisionles…

RS485方向自动控制电路分享

我们都知道RS485是半双工通信&#xff0c;所以在传输的时候需要有使能信号&#xff0c;标明是发送还是接收信号&#xff0c;很多时候就简单的用一个IO口控制就好了&#xff0c;但是有一些低成本紧凑型的MCU上&#xff0c;一个IO口也是很珍贵的&#xff0c;因此&#xff0c;如果…

ElementUI中的el-select显示的不是对应label值

这个下拉框组件可以在v-model绑定的值等于option中value的值时&#xff0c;显示对应option的label 但是下面这个出了问题&#xff0c;显示的是1或2或3&#xff0c;而不是对应的label <el-select v-model"editParam.role_id" placeholder"请选择角色身份&qu…

UE5材质节点Frac/Fmod

Frac取小数 Fmod取余数 转场效果 TimeMultiplyFrac很常用 Timesin / Timecos 制作闪烁效果

图神经网络_GNN从入门到入门

文章目录 0 提出背景1 网络结构2 GNN算法2.1 算法描述2.2 举个栗子 3 GNN本质4 应用领域5 代码案例5.1 PyG的下载5.2 常用数据集介绍5.3 one demo 0 提出背景 经典的深度神经网络适用于 欧几里得数据&#xff08;Euclidean data&#xff09;&#xff0c;比如我们常常用卷积神经…

CDGA数据治理工程师-学习笔记

目录 第一章 数据管理 组织管理数据的目标&#xff1a; 数据管理的原则&#xff1a; 数据生命周期&#xff1a; 数据管理战略的组成应包括&#xff1a; 第二章 数据伦理 目标 数据伦理活动 数据处理伦理问题 贝尔蒙特 数据伦理准则 违背伦理进行数据处理的风险 建立…

AWS K8s 部署架构

Amazon Web Services&#xff08;AWS&#xff09;提供了一种简化的Kubernetes&#xff08;K8s&#xff09;部署架构&#xff0c;使得在云环境中管理和扩展容器化应用变得更加容易。这个架构的核心是AWS EKS&#xff08;Elastic Kubernetes Service&#xff09;&#xff0c;它是…

计算机网络 (16)数字链路层的几个共同问题

一、封装成帧 封装成帧是数据链路层的一个基本问题。数据链路层把网络层交下来的数据构成帧发送到链路上&#xff0c;以及把接收到的帧中的数据取出并上交给网络层。封装成帧就是在一段数据的前后分别添加首部和尾部&#xff0c;构成了一个帧。接收端在收到物理层上交的比特流后…

网页单机版五子棋小游戏项目练习-初学前端可用于练习~

今天给大家分享一个 前端练习的项目&#xff0c;技术使用的是 html css 和javascrpit 。希望能对于 刚刚学习前端的小伙伴一些帮助。 先看一下 实现的效果图 1. HTML&#xff08;HyperText Markup Language&#xff09; HTML 是构建网页的基础语言&#xff0c;它的主要作用是定…

Linux-Ubuntu之RTC实时时钟显示

Linux-Ubuntu之RTC实时时钟显示 一&#xff0c;原理二&#xff0c;代码实现三&#xff0c;小结1.为什么这个显示不出来&#xff1f; 一&#xff0c;原理 这个RTC的和计数器差不多&#xff0c;往对应寄存器中放入初始化的时间&#xff0c;然后在时钟的作用下&#xff0c;进行累…

k8s启动报错

执行kubeadm init --image-repository registry.aliyuncs.com/google_containers 出现如下结果: [api-check] The API server is not healthy after 4m0.000885686s Unfortunately, an error has occurred: context deadline exceeded This error is likely caused by:…

halcon中的BLOB与灰度直方图的分析与理解

灰度直方图 概念&#xff1a;灰度直方图是关于灰度级分布的函数&#xff0c;是对图像中灰度级分布的统计。灰度直方图将数字图像中的所有像素&#xff0c;按照灰度值的大小&#xff0c;统计其出现的频率。 BLOB概念&#xff1a; BLOB分析可以分析图像中连通区域的数量、位置、形…

离线的方式:往Maven的本地仓库里安装依赖

jar文件及源码的绝对路径&#xff0c;gav坐标&#xff0c;打包方式&#xff0c;Maven本地仓库的路径 mvn install:install-file ^-DfileD:\hello-spring-boot-starter-1.0-SNAPSHOT.jar ^-DsourcesD:\hello-spring-boot-starter-1.0-SNAPSHOT-sources.jar ^-DgroupIdcom.examp…

同三维T80004ES H.265高清SDI编码器

1路SDI 1路3.5音频输入,1路SDI环出 产品简介&#xff1a; 同三维T80004ES高标清SDI音视频编码器支持1路高清或1路标清SDI音视频&#xff0c;1路3.5MM独立音频接口采集功能。编码输出双码流H.265/H.264格式&#xff0c;音频 MP3/AAC格式。编码码率可调&#xff0c;画面质量可控制…