netty 瞬间搞懂 LengthFieldBasedFrameDecoder解码器
解码器LengthFieldBasedFrameDecoder构造器,涉及5个参数,都与长度域(数据包中的长度字段)相关,具体介绍如下:
(1) maxFrameLength - 发送的数据包最大长度;
(2) lengthFieldOffset - 长度域偏移量,指的是长度域位于整个数据包字节数组中的下标;
(3) lengthFieldLength - 长度域的自己的字节数长度。
(4) lengthAdjustment – 长度域的偏移量矫正。 如果长度域的值,除了包含有效数据域的长度外,还包含了其他域(如长度域自身)长度,那么,就需要进行矫正。矫正的值为:包长 - 长度域的值 – 长度域偏移 – 长度域长。
(5) initialBytesToStrip – 丢弃的起始字节数。丢弃处于有效数据前面的字节数量。比如前面有4个节点的长度域,则它的值为4。
相信大家看到上面这些参数基本就处于懵逼状态,那我们下面就详细解说一下,让大家一个例子搞定所有场景
下面详细讲解一下4个参数的作用
lengthFieldOffset 这里说的是跳过多少字节才到Length这个字段,那就是说要跳过HDR1这个值,所以这里是1
lengthFieldLength 是Length的长度 所以是2个字节
lengthAdjustment
0x0010代表十进制是16
16+调整值=13(长度域后面的总长度HDR2=1,Actual,Content=12)---------------------这里说明一下,Actual Content为啥是12个字节,因为在逗号之后有一个空格,查看官网可得知
推算一下
调整值=13-16=-3
initialBytesToStrip 这里说的是我们拿到的所有报文,丢弃多少字节是我们需要的字节
我们看BEFORE DECODE 到 AFTER DECODE
是跳过了HDR1 LENGTH,所以是3个字节