AsyncReceiveDispatcher中buffer空间的疑惑
来源:8-9 消息粘包与消息不全测试
等待灬
2018-12-28
/**
* 解析数据到Packet
*/
private void assemblePacket(IoArgs args) {
if (packetTemp == null) {
int length = args.readLength();
packetTemp = new StringReceivePacket(length);
buffer = new byte[length];
total = length;
position = 0;
}
int count = args.writeTo(buffer, 0);
if (count > 0) {
packetTemp.save(buffer, count);
position += count;
// 检查是否已完成一份Packet接收
if (position == total) {
completePacket();
packetTemp = null;
}
}
}buffer = new byte[length];老师,这一步,就是消息第一次进来packetTemp为空,此时要初始化packetTemp,当前dispatcher中的buffer的length其实是可以设置为args的capacity的吧,
因为假如我消息的长度为50,args的capacity为5,每一次执行这个int count = args.writeTo(buffer, 0)其实也就能写进去5个长度的数据,也就是args的capacity限制了,但是buffer的长度设置的是50,其实buffer后面空间每次都空的,因为packetTemp.save(buffer, count);的时候也是从buffer的0下标开始读去save的
写回答
2回答
-
Yes Yes~~ 是这样的哈~~ 学到了哈~~;在你的这个调度中buffer的长度只需要是args的容量即可.
052019-07-13 -
等待灬
提问者
2018-12-28
我试了一下好像没什么问题,就是不知道我想的对不对,有没有隐患
00
相似问题