LengthFieldBasedFrameDecoder

常用于处理数据分包传输问题,先对构造方法LengthFieldBasedFrameDecoder中的参数做以下说明:

maxFrameLength:接受包的最大长度

lengthFieldOffset:长度属性的偏移位,即读取包长度时从lengthFieldOffset起往后读lengthFieldLength个字节表示长度

lengthFieldLength:长度属性的长度,即存放整个大数据包长度的字节所占的长度,通常为1, 2, 3, 4, or 8

lengthAdjustment:包长度的补偿值,即真实的消息长度为根据lengthFieldOffset和lengthFieldLength属性读出的长度 +lengthAdjustment

initialBytesToStrip:跳过多少个字节,以便接收端直接接受到不含长度属性的内容,一般为 lengthFieldOffset+lengthFieldLength)个字节

failFast :默认为true,当frame长度超过maxFrameLength时立即报TooLongFrameException异常,为false,读取完整个帧再报异常


下面实例演示:


1、包的长度为4个字节,解码后的消息包含长度属性

new LengthFieldBasedFrameDecoder(1024, 0, 4, 0, 0, false)


解码前 解码后

    长度+具体内容          长度+具体内容

[0, 0, 0, 5, 104, 101, 108, 108, 111] [0, 0, 0, 5, 104, 101, 108, 108, 111]


2、包的长度为4个字节,解码后的消息不包含长度

new LengthFieldBasedFrameDecoder(1024, 0, 4, 0, 4, false)


解码前 解码后

    长度+具体内容          长度+具体内容

[0, 0, 0, 5, 104, 101, 108, 108, 111] [104, 101, 108, 108, 111]


3、lengthFieldOffset为1,解码后的消息不包含长度

new LengthFieldBasedFrameDecoder(1024, 1, 4, 0, 5, false)


解码前 解码后

    长度+具体内容          长度+具体内容

[1, 0, 0, 0, 5, 104, 101, 108, 108, 111] [104, 101, 108, 108, 111]

lengthFieldOffset为1,即消息内容的长度从第2个字节读,长度为5。initialBytesToStrip为获取去除前面5个字节的消息,即最后的消息内容为[104, 101, 108, 108, 111]


4、lengthAdjustment为1,解码后的消息不包含长度

new LengthFieldBasedFrameDecoder(1024, 0, 4, 1, 4, false)


解码前 解码后

    长度+具体内容          长度+具体内容

[0, 0, 0, 4, 104, 101, 108, 108, 111] [104, 101, 108, 108, 111]

读取前4个字节,消息的长度为4。因为lengthAdjustment为1,即消息内容的实际长度为4+1=5个字节,读取后5个字节为最后解码后的消息






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值