JAVA NIO 翻译系列(四、Scatter和Gather)

NIO的分散写与集中读,前面的文章说过 channel都是跟buffer紧密相关的,分散写就是将channel的数据写入到多个buffer中,集中读刚好相反。

分散写的图解:


JAVA NIO 翻译系列(四、Scatter和Gather)_第1张图片
Java NIO: Scattering Read

直接看代码列子吧,每行都注释的很清楚了,


JAVA NIO 翻译系列(四、Scatter和Gather)_第2张图片
注意:这个例子,其实文件并没有读完

下面是上面的代码执行结果,可以参考


JAVA NIO 翻译系列(四、Scatter和Gather)_第3张图片
结果


集中读的图解,与上面的相反:


JAVA NIO 翻译系列(四、Scatter和Gather)_第4张图片
Java NIO: Gathering Write

代码片段:

ByteBuffer header = ByteBuffer.allocate(128);

ByteBuffer body  = ByteBuffer.allocate(1024);

//write data into buffers

ByteBuffer[] bufferArray = { header, body };

channel.write(bufferArray);



buffers数组被传入到write方法的参数中,write方法会按照顺序将数组里面的buffer内容写入到channel中。buffer里面有多少数据则会写多少数据进去,比如讲一个buffer的capacity大小为127,但是实际上只有58个bytes,则只会写入58个bytes到channel中。

你可能感兴趣的:(JAVA NIO 翻译系列(四、Scatter和Gather))