分散读取
分散读取(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); }
控制台的打印:
文件的写入: