MENU

Netty笔记

May 15, 2022 • 学习笔记

Netty笔记

ByteBuf 转 byte数据

ByteBuf byteBuf = (ByteBuf) msg;
byte[] b = byteBuf.array(); //这样转不对
byte[] msg = new byte[byteBuf.readableBytes()];    //这样才对
byteBuf.readBytes(msg);

TCP传输发送过快导致消息粘包

参考Candy框架,Candy框架中在每次发送二进制数据流时,会先行发送一个长度为六个(byte)字节的头信息

012345
协议版本序列化类型正文长度(bodyDataLength >>> 24)正文长度(bodyDataLength >>> 16)正文长度(bodyDataLength >>> 8)正文长度(bodyDataLength)

byte 长度8bit , int长度为4个byte=32bit , 在无符号运算(>>>)下使用byte的8个bit

处理包不完整和粘包的方法,接受ByteBuf后会判断其长度是否大于head(6)的长度,如果小于则不处理,如果大于则开始获取head中的bodylength,然后继续判断数组长度是否小于headlength+bodylength,如果小于则不处理,如果大于则返回接受到的字节数组(要注意游标的位置和移动)

img