Netty-LengthFieldBasedFrameDecoder参数lengthAdjustment的理解


lengthAdjustment是修正值的意思,如果是修正值,它修正的是什么数据呢?

我们知道LengthFieldBasedFrameDecoder解码器报文头里面会传一个报文体的长度值(我们称他为长度域),其实这个修正值就是修正长度域的。

什么情况需要修正这个长度域?

Netty读取完长度域后,就会接着读取后续报文( 我们称读取完长度域后剩下的所有的报文为后续报文 ),当后续报文和长度域的值相等时,则不需要修正,lengthAdjustment=0。如果不等时,则需要修正,lengthAdjustment(可为负)+长度域的值=后续报文长度

举几个例子

1.下面报文结构,content就是上文说的后续报文

type length content
占1个字节 占4个字节 报文体
  • 假如报文length=10,content真正的长度为10,后续报文=content=10,那lengthAdjustment=0,报文长度无修修正。
  • 假如报文length=15,content真正的长度为10(说明length代表整个报文的长度,也就是content+type+content),后续报文=content=10,后续报文和length(15)不等,所以报文长度需要修正,lengthAdjustment=-5。

2.下面报文结构,content+type才是上文说的后续报文

length type content
占4个字节 占一个字节 报文体
  • 假如报文length=9,content真正的长度为9,而后续报文=content+type=10,所以后续报文的长度和length(9)不等,所以报文长度需要修正,lengthAdjustment=1。
  • 假如报文length=15,content真正的长度为10(说明length代表整个报文的长度,也就是content+type+content),而后续报文=content+type=11,所以后续报文的长度和length(15)不等,报文长度需要修正,所以lengthAdjustment=-4。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM