netty 瞬间搞懂 LengthFieldBasedFrameDecoder解码器

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个字节,因为在逗号之后有一个空格,查看官网可得知

https://docs.jboss.org/netty/3.1/api/org/jboss/netty/handler/codec/frame/LengthFieldBasedFrameDecoder.html

推算一下

调整值=13-16=-3

 

initialBytesToStrip  这里说的是我们拿到的所有报文,丢弃多少字节是我们需要的字节

我们看BEFORE DECODE 到 AFTER DECODE

是跳过了HDR1 LENGTH,所以是3个字节

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值