NIO之分散与聚集

分散和聚集的理解

分散读取

是指从Channel中读取的数据“分散”到多个buffer中


注:按照缓冲区的顺序,从Channel中读取的数据依次将buffer填满
代码实现如下

 1    @Test
2    public void test5() throws Exception{
3        RandomAccessFile rw = new RandomAccessFile("src/test/java/1.txt""rw");
4
5        // 获取通道
6        FileChannel channel = rw.getChannel();
7
8        // 分配指定大小的缓冲区
9        ByteBuffer buf1 = ByteBuffer.allocate(100);
10        ByteBuffer buf2 = ByteBuffer.allocate(1024);
11
12        // 分散读取
13        ByteBuffer[] bufs = {buf1, buf2};
14        channel.read(bufs);
15
16        // 切换为读模式
17        for (ByteBuffer byteBuffer : bufs) {
18            byteBuffer.flip();
19        }
20
21        System.out.println(new String(bufs[0].array(), 0, bufs[0].limit()));
22        System.out.println("-----------------------------");
23        System.out.println(new String(bufs[1].array(), 0, bufs[1].limit()));
24
25    }
聚集写入

是指将多个buffer中的数据“聚集”到Channel中。


注:按照缓冲区的顺序,写入position和limit之间的数据到Channel中。
代码如下:

 1    @Test
2    public void test5() throws Exception{
3        RandomAccessFile rw = new RandomAccessFile("src/test/java/1.txt""rw");
4
5        // 获取通道
6        FileChannel channel = rw.getChannel();
7
8        // 分配指定大小的缓冲区
9        ByteBuffer buf1 = ByteBuffer.allocate(100);
10        ByteBuffer buf2 = ByteBuffer.allocate(1024);
11
12        // 分散读取
13        ByteBuffer[] bufs = {buf1, buf2};
14        channel.read(bufs);
15
16        // 切换为读模式
17        for (ByteBuffer byteBuffer : bufs) {
18            byteBuffer.flip();
19        }
20
21        System.out.println(new String(bufs[0].array(), 0, bufs[0].limit()));
22        System.out.println("-----------------------------");
23        System.out.println(new String(bufs[1].array(), 0, bufs[1].limit()));
24
25        // 聚集写入
26        RandomAccessFile rw1 = new RandomAccessFile("src/test/java/2.txt""rw");
27        FileChannel channel1 = rw1.getChannel();
28        channel1.write(bufs);
29
30    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值