Netty-LengthFieldBasedFrameDecoder参数的理解
public LengthFieldBasedFrameDecoder(int maxFrameLength, int lengthFieldOffset, int lengthFieldLength, int lengthAdjustment, int initialBytesToStrip) {
this(maxFrameLength, lengthFieldOffset, lengthFieldLength, lengthAdjustment, initialBytesToStrip, true);
}
(1) maxFrameLength - 数据包最大长度。
(2) lengthFieldOffset - 长度域偏移量,指的是长度域的偏移量,表示跳过指定个数字节之后的才是长度域;例如在长度域字段前边还有head字段len=2时,那么此值设置为2,表示把长度域之前的字段都偏移掉。
(3) lengthFieldLength - 长度域的自己的字节数长度。
(4) lengthAdjustment – 长度域的偏移量矫正。 如果长度域的值,除了包含有效数据域的长度外,还包含了其他域(如长度域自身)长度,那么,就需要进行矫正;Netty读取完长度域后,就会接着读取后续报文( 我们称读取完长度域后剩下的所有的报文为后续报文 ),当后续报文和长度域的值相等时,则不需要修正,lengthAdjustment=0;如果不等时,则需要修正,lengthAdjustment(可为负)+长度域的值=后续报文长度;例如长度域的值为15,而后续报文长度为10,那么长度域的15不等于后续报文的10,进行矫正,此参数值设置为-5;如果长度域的值为10,而后续报文为15,那么此参数设置为5。
(5) initialBytesToStrip – 丢弃的起始字节数。丢弃处于有效数据前面的字节数量。比如前面有4个节点的长度域,则它的值为4。
(6)failFast:如果为true,则表示读取到长度域,TA的值的超过maxFrameLength,就抛出一个TooLongFrameException,而为false表示只有当真正读取完长度域的值表示的字节之后,才会抛出TooLongFrameException,默认情况下设置为true,建议不要修改,否则可能会造成内存溢出。