辛星2018年nio教程第五篇:Scatter与Gather
2018-04-07 本文已影响0人
辛星0913
先打个小广告,关注辛星教程,我的微信号xinxing0913,该项目源码所在的github地址: https://github.com/xinxing0913/xinxing-nio-guide。
在nio中,有两个比较重要的概念,分别是Scatter与Gather,Scatter是分散,它可以把Channel中的数据写入到多个Buffer中,而Gather则是聚合,它表示把多个Buffer中的数据写入到同一个Channel中。
在我们经过前面多个范例的实战之后,它并没有什么难度,来看一个具体的代码范例把:
/**
* 我们这里主要介绍Scatter和Gather
* Scatter即分散,它是把Channel中的数据写入到多个Buffer中
* Gather即聚合,它是把多个Buffer中的数据写入到同一个Channel
*/
public class Demo7 {
public static void main(String[] args) throws Exception {
Demo7 demo = new Demo7();
System.out.println("----scatter范例-----");
demo.scatter();
System.out.println("----gather范例-----");
demo.gather();
}
public void scatter() throws Exception {
ByteBuffer buffer1 = ByteBuffer.wrap("hello".getBytes());
ByteBuffer buffer2 = ByteBuffer.wrap("梦之都".getBytes());
ByteBuffer[] buffers = {buffer1, buffer2};
FileChannel channel = new RandomAccessFile("src/main/resources/demo07.txt", "rw").getChannel();
channel.write(buffers);
channel.close();
System.out.println("写入文件操作成功");
}
public void gather() throws Exception{
ByteBuffer buffer1 = ByteBuffer.allocate(5);
ByteBuffer buffer2 = ByteBuffer.allocate(20);
ByteBuffer[] buffers = {buffer1, buffer2};
FileChannel channel = new RandomAccessFile("src/main/resources/demo07.txt", "rw").getChannel();
channel.read(buffers);
channel.close();
System.out.println("buffer1的内容是:" + new String(buffer1.array()));
System.out.println("buffer2的内容是:" + new String(buffer2.array()));
}
}
在上面的代码中,并没有什么难以理解的地方,我们来看一下具体的执行效果吧:
image.png
对于Scatter与Gather,我们就介绍到这里啦。