LengthFieldBasedFrameDecoder
数据包由[魔数][消息头][长度域][消息头][消息体]构成,魔数和消息头是可选的,长度域和消息头位置可以互换,长度域的值可以表示消息体的大小,也可以表示整个包体的大小,解析后的包体只能是原包或者原包前面截取一部分
lengthFieldOffset<br>lengthFieldLength,这2个值用来定位长度域在包中的位置,从而取出长度域的值
解码过程大体分为2步:<br>1、整个包体的长度=长度域的值+lengthFieldOffset + lengthFieldLength(长度域的结束漂移量)+lengthAdjustment<br>2、最终包体=initialBytesToStrip(开始截断的位置) 到 整个包体的长度-initialBytesToStrip<br>
如果长度域的值表示的是消息体的大小,lengthAdjustment应该=0<br>如果长度域的值是消息大小,且消息头在长度域之后,lengthAdjustment应该等于消息头大小<br>如果长度域的值是整个包体的大小,lengthAdjustment应该等于(-长度域的结束漂移量)
再根据initialBytesToStrip截断即可