前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >netty 权威指南勘误[通俗易懂]

netty 权威指南勘误[通俗易懂]

作者头像
全栈程序员站长
发布2022-09-27 12:54:05
7510
发布2022-09-27 12:54:05
举报
文章被收录于专栏:全栈程序员必看

大家好,又见面了,我是你们的朋友全栈君。

近日就netty库的使用,试读了 netty权威指南一书,就书中的编码问题进行以下校正

环境:

1、我使用的是4.1.2版本的netty库

2、IDE 为netbeans 8.1

问题:

E1. handler 适配器应继承使用 ChannelInboundHandlerAdapter 。

E2. 在私有协议开发一章:

编码器中函数encode 中设置帧长度应为以下代码

代码语言:javascript
复制
            sendBuf.writeInt(0);
            sendBuf.setInt(4, sendBuf.readableBytes()-8); 

书中没有减去8,会导致数组越界。 因为netty认为 frame的长度为所载内容的长度,而不是报文的长度。 报文的长度为 length+lengthOffset+lengthFieldLength。

解码器中decode函数应该把in 替换成frame。 因为frame为解析后的报文, in为原始数据流,报文已经从原始流中读取出;如果继续读取则是错误的。应该从frame中读取数据信息。例如

代码语言:javascript
复制
<pre name="code" class="java">header.setCrcCode(in.readInt());

应该替换成header.setCrcCode(frame.readInt());

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/188520.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档