zoukankan      html  css  js  c++  java
  • 6、NIO--分散读取与聚集写入

    分散读取

    分散读取(Scattering Reads)是指从 Channel 中读取的数据“分
    散”到多个 Buffer 中。

     注意:按照缓冲区的顺序,从 Channel 中读取的数据依次将 Buffer 填满。

    聚集写入

    聚集写入(Gathering Writes)是指将多个 Buffer 中的数据“聚集”
    到 Channel

    注意:按照缓冲区的顺序,写入 position 和 limit 之间的数据到 Channel 。

    测试小实例:

    //分散读取和聚集写入
        @Test
        public void test7() throws IOException {
            
            RandomAccessFile raf = new RandomAccessFile("d:\a.txt","rw");
            
            //1、获取通道
            FileChannel fileChannel = raf.getChannel();
            
            //2、分配指定大小的缓冲区
            ByteBuffer buf1= ByteBuffer.allocate(20);
            ByteBuffer buf2 = ByteBuffer.allocate(200);
            
            //3、分散读取
            ByteBuffer [] bufs = {buf1,buf2};
            //read(ByteBuffer[] dsts) 
            fileChannel.read(bufs);
            
            for(ByteBuffer b : bufs){
                b.flip();
            }
            
            System.out.println(new String(bufs[0].array(),0,bufs[0].limit()));
            System.out.println(new String(bufs[1].array(),0,bufs[1].limit()));
            
            //聚集写入
            RandomAccessFile raf2 = new RandomAccessFile("d:\aa.txt", "rw");
            FileChannel fileChannel2 = raf2.getChannel();
            //write(ByteBuffer[] srcs)
            fileChannel2.write(bufs);
            
        }

     控制台的打印:

    文件的写入:

     

  • 相关阅读:
    Java Web学习笔记---用GET实现搜索引擎
    Docker之docker log详解
    Docker之save、load、export、import命令
    Docker之镜像地址
    GIT使用详解
    Docker之commit制作镜像
    Python之sys.arg[]的用法解释
    python常用内置函数
    VBA精彩代码分享-1
    C#读写EXCEL单元格的问题
  • 原文地址:https://www.cnblogs.com/Mrchengs/p/10825048.html
Copyright © 2011-2022 走看看