netty如何判斷數據包是否結束

上一篇中分析netty會緩存不完整的數據包,那如何判斷數據包是否結束了?

本章主要分析netty中常用判斷tcp中數據包是否上傳完畢。這裏我還是用LengthFieldBasedFrameDecoder進行分析

其解析數據可以分爲兩個部分,head表示頭用來記錄數據長度  body表示存放的數據部分

我們以head存放body長度(不包括自身長度)

對應LengthFieldBasedFrameDecoder配置

maxFrameLength 表示數據總體字節最大大小

lengthFieldOffset 表示head相對啓動地址的偏移量(一般設置爲0)

LengthFieldLength 設置頭的大小

initialBytesToStrip 解析數據是跳過的字節數量,一般設置爲頭的大小表示不將頭納入解析

上面lengthFieldEndOffset表示解析出完整的頭需要的數據字節大小

我們正式分析其解碼過程decode

上圖中主要是readIndex來控制,如果數據大小不滿足直接return掉不移動readIndex如果大小滿足則移動readIndex爲解析包的大小