美文网首页
辛星2018年nio教程第五篇:Scatter与Gather

辛星2018年nio教程第五篇:Scatter与Gather

作者: 辛星0913 | 来源:发表于2018-04-07 23:10 被阅读0次

    先打个小广告,关注辛星教程,我的微信号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,我们就介绍到这里啦。

    相关文章

      网友评论

          本文标题:辛星2018年nio教程第五篇:Scatter与Gather

          本文链接:https://www.haomeiwen.com/subject/tltbzxtx.html