前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >JAVA NIO Scatter/Gather(矢量IO)

JAVA NIO Scatter/Gather(矢量IO)

作者头像
WindWant
发布2020-09-11 10:56:10
6300
发布2020-09-11 10:56:10
举报
文章被收录于专栏:后端码事

矢量IO=Scatter/Gather:

在多个缓冲区上实现一个简单的IO操作。减少或避免了缓冲区拷贝和系统调用(IO)

write:Gather

数据从几个缓冲区顺序抽取并沿着通道发送,就好比全部缓冲区全部连接起来放入一个大的缓冲区进行发送,缓冲区本身不具备gather能力。

read:Scatter

从通道读取的数据会按顺序散布到多个缓冲区,直到缓冲区被填满或者通道数据读完。

Gather:

Scatter:

示例代码:

代码语言:javascript
复制
/**
     * channel Gather/Scatter
     */
    public static void channelGatherScatter(){
        ByteBuffer head = ByteBuffer.allocate(4);
        ByteBuffer body = ByteBuffer.allocate(100);
        RandomAccessFile afile = null;
        RandomAccessFile bfile = null;
        ReadWriteLock readWriteLock = new ReentrantReadWriteLock();
        try {
            afile = new RandomAccessFile("hello.txt", "r");
            bfile = new RandomAccessFile("hehe.txt", "rw");
            readWriteLock.readLock().lock();
            FileChannel fileChannel = afile.getChannel();
            ByteBuffer[] buffers = {head, body};
            while (fileChannel.read(buffers) != -1){
            }
            head.flip();
            body.flip();
            System.out.println(new String(head.array()));
            System.out.println(new String(body.array()));
            readWriteLock.readLock().unlock();
            fileChannel.close();
            afile.close();

            readWriteLock.writeLock().lock();
            FileChannel bfileChannel = bfile.getChannel();

            while (bfileChannel.write(buffers) > 0){
            }

            readWriteLock.writeLock().unlock();
            bfileChannel.close();
            bfile.close();
        }catch (Exception e){
            e.printStackTrace();
        }
    }

带offset、length参数重载read write方法,指明从那个buffer开始,共使用多少个buffer。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2016-10-25 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档