NIO之分散与聚集

≡放荡痞女 提交于 2020-01-26 01:03:27

分散和聚集的理解

分散读取

是指从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    }
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!