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