程序员

详细解析Java NIO中的读写操作,读操作Scatter Re

2022-03-17  本文已影响0人  攻城狮Chova

Scatter和Gather

Scatter

Gather

Scattering Reads

ByteBuffer header = ByteBuffer.allocate(128);
ByteBuffer body = ByteBuffer.allocate(1024);
ByteBuffer[] bufferArray = {header, body};
channel.read(bufferArray);

Scattering Reader在移动到下一个buffer前,必须填满当前的buffer.所以不适用于消息大小不固定的动态消息.也就是说,如果存在消息头和消息体,消息头必须完成填充,Scattering Reads才能正常工作

Gathering Writes

ByteBuffer header = ByteBuffer.allocate(128);
ByteBuffer body = ByteBuffer.allocate(1024);
ByteBuffer[] byteArray = {header, body};
channel.write(byteArray);

如果一个buffer的容量为128字节,但是仅仅包含58字节的数据,那么这58字节的数据将被写入到channel中.因此,Gathering Writes能较好的处理动态消息

上一篇下一篇

猜你喜欢

热点阅读