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

netty 权威指南勘误[通俗易懂]近日就netty库的使用,试读了netty权威指南一书,就书中的编码问题进行以下校正1、我使用的是4.1.2版本的netty库2、IDE为netbeans8.1E1. handler适配器应使用ChannelInboundHandlerAdapter。 E2. 在私有协议开发一章:     编码器中函数encode中设置帧长度应为以下代码

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

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

环境:

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

2、IDE 为netbeans 8.1

问题:

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

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

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

            sendBuf.writeInt(0);
            sendBuf.setInt(4, sendBuf.readableBytes()-8); 

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

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

<pre name="code" class="java">header.setCrcCode(in.readInt());

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


版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号