LengthFieldPrepender 的取值范围
2020-05-13 本文已影响0人
程序男保姆
- ######## class LengthFieldPrepender extends MessageToMessageEncoder<ByteBuf>
/**根据lengthFieldLength字段 与 传入数据的byte.length 判断是否合适*/
switch (lengthFieldLength) {
case 1:
if (length >= 256) {
// 如果长度为1 并且传输的字符长度大于byte的最大容量256时,则报错
throw new IllegalArgumentException(
"length does not fit into a byte: " + length);
}
out.add(ctx.alloc().buffer(1).order(byteOrder).writeByte((byte) length));
break;
case 2:
if (length >= 65536) {
// 如果长度为2 并且传输的字符长度大于short的最大容量65536时,则报错
throw new IllegalArgumentException(
"length does not fit into a short integer: " + length);
}
out.add(ctx.alloc().buffer(2).order(byteOrder).writeShort((short) length));
break;
case 3:
if (length >= 16777216) {
// 如果长度为3 并且传输的字符长度大于16777216时,则报错
throw new IllegalArgumentException(
"length does not fit into a medium integer: " + length);
}
out.add(ctx.alloc().buffer(3).order(byteOrder).writeMedium(length));
break;
case 4:
out.add(ctx.alloc().buffer(4).order(byteOrder).writeInt(length));
break;
case 8:
out.add(ctx.alloc().buffer(8).order(byteOrder).writeLong(length));
break;