首页 > 其他 > 详细

6、NIO--分散读取与聚集写入

时间:2019-05-07 14:34:53      阅读:177      评论:0      收藏:0      [点我收藏+]

 

分散读取

分散读取(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);
        
    }

 控制台的打印:

技术分享图片

文件的写入:

 技术分享图片

 

6、NIO--分散读取与聚集写入

原文:https://www.cnblogs.com/Mrchengs/p/10825048.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!