上一篇中分析netty會緩存不完整的數據包,那如何判斷數據包是否結束了?
本章主要分析netty中常用判斷tcp中數據包是否上傳完畢。這裏我還是用LengthFieldBasedFrameDecoder進行分析
其解析數據可以分爲兩個部分,head表示頭用來記錄數據長度 body表示存放的數據部分
我們以head存放body長度(不包括自身長度)
對應LengthFieldBasedFrameDecoder配置
maxFrameLength 表示數據總體字節最大大小
lengthFieldOffset 表示head相對啓動地址的偏移量(一般設置爲0)
LengthFieldLength 設置頭的大小
initialBytesToStrip 解析數據是跳過的字節數量,一般設置爲頭的大小表示不將頭納入解析
上面lengthFieldEndOffset表示解析出完整的頭需要的數據字節大小
我們正式分析其解碼過程decode
上圖中主要是readIndex來控制,如果數據大小不滿足直接return掉不移動readIndex如果大小滿足則移動readIndex爲解析包的大小