1. 程式人生 > >6、NIO--分散讀取與聚集寫入

6、NIO--分散讀取與聚集寫入

ray 數據 size pri bsp ech arr cep new

分散讀取

分散讀取(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); }

控制臺的打印:

技術分享圖片

文件的寫入:

技術分享圖片

6、NIO--分散讀取與聚集寫入