Java NIO的Scatter与Gather

Scatter(分散):分散读取,从管道Channel中读取的数据分散到一个或者多个缓冲区Buffer中,分散的时候会依次的按缓冲区的顺序一个一个的进行。
Gather(聚集):聚集写入,把缓冲区position到limit之间的数据依次的写入到管道中。
这样,一个大文件就可以分割成许多小的文件进行传输。
其示意图如下:
这里写图片描述

这里写图片描述

代码实现如下:

public class Demo06_ScotterAndGather {
      public static void main(String[] args) throws IOException {
        RandomAccessFile raf1=new RandomAccessFile("hello2.txt", "rw");
        //获取通道
        FileChannel channel1 = raf1.getChannel();
        //设置缓冲区
        ByteBuffer buf1=ByteBuffer.allocate(50);
        ByteBuffer buf2=ByteBuffer.allocate(1024);
        //分散读取的时候缓存区应该事有序的,所以把几个缓冲区加入数组中
        ByteBuffer[] bufs={buf1,buf2};
        //通道进行传输
        channel1.read(bufs);

        //查看缓冲区中的内容
        for (int i = 0; i < bufs.length; i++) {
            //切换为读模式
            bufs[i].flip();
        }

        System.out.println(new String(bufs[0].array(),0,bufs[0].limit()));
        System.out.println();
        System.out.println(new String(bufs[1].array(),0,bufs[1].limit()));

        //聚集写入
        RandomAccessFile  raf2=new RandomAccessFile("ScoAndGat.txt", "rw");
        FileChannel channel2 = raf2.getChannel();
        //只能通过通道来进行写入
        channel2.write(bufs);
      }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值