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
相似问题
