【Java NIO scatter和gather】
scatter:从Channel读取数据到多个buffer
gather:从多个buffer写数据到一个Channel
这两者在需要分开处理传送数据时很有用。例如:一条消息包括消息头(header)和消息主体(body)时,可以把它们存放在不同的buffer里。
【scatter读】(对于channel主语来说是读)
ByteBuffer header; ... body; ByteBuffer[] bufferArray = {header, body};
channel.read(bufferArray); // (对于buffer主语来说是写,也就是写入buffer)
当一个buffer满了的时候会自动移动到下一个buffer,因此只适用于固定消息大小的情况下。
【gather写】
channel.write(bufferArray);
只有再position和limit之间的数据会被写入channel,因此可以适用于消息长度不同的情况。