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。
posted @ 2021-03-04 14:26  Small丶  阅读(984)  评论(0编辑  收藏  举报