分散读取与聚集写入
分散读取(scattering Reads)
将通道中的数据分散到多个缓冲区中
聚集写入(gathering Writes)
将多个缓冲区的数据聚集到通道中
一个Channel可以同时支持多个Buffer有序传输(例如文件分段读取一个大文件)
代码示例:
public static void main(String[] args) throws IOException {
//随机访问
RandomAccessFile raf= new RandomAccessFile("test.txt", "rw");
//获取通道
FileChannel channel = raf.getChannel();
//分配指定大小指定缓冲区
ByteBuffer buf1=ByteBuffer.allocateDirect(100);
ByteBuffer buf2=ByteBuffer.allocateDirect(1024);
// 分散读取
ByteBuffer[] bufs={buf1,buf2};
channel.read(bufs);
for (ByteBuffer byteBuffer : bufs) {
// 切换成读模式
byteBuffer.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()));
System.out.println("------聚集写入---------");
RandomAccessFile raf2= new RandomAccessFile("test2.txt", "rw");
//获取通道
FileChannel channel2 = raf2.getChannel();
channel2.write(bufs);
raf2.close();
raf.close();
}