1. 程式人生 > >Java NIO Scatter/Gather(五)

Java NIO Scatter/Gather(五)

有關 tar 圖片 http tutorials 動態 data 取數據 cat

原文鏈接:http://tutorials.jenkov.com/java-nio/scatter-gather.html,如有侵權,立刪

Java NIO Scatter/Gather

  • Scattering Reads
  • Gathering Writes 

  Java NIO引入了 Scatter 和 Gather,這兩個概念使用於向channel寫入數據和從channel讀取數據用的。

  scattering是和讀操作有關的,channel將數據讀取到多個buffer中去,channel分散數據到多個buffer中。

  gathering是個寫操作有關的,將多個buffer中的數據寫入到channel中去。

  scattering和gathering是非常有用的,在一些情形下。例如你需要傳輸不同的數據模塊。

 scattering Reads

  一個scattering read從單個channel中讀取數據到多個buffer中。上圖

                        技術分享圖片

1 ByteBuffer header = ByteBuffer.allocate(128);
2 ByteBuffer body   = ByteBuffer.allocate(1024);
3 
4 ByteBuffer[] bufferArray = { header, body };
5 
6 channel.read(bufferArray);

  要想向第二個buffer中寫入數據,只能把第一個buffer寫滿。所以scattering read不適合動態數據,適合固定的數據大小的寫入。

 Gathering Writes 

  上圖

                        技術分享圖片

ByteBuffer header = ByteBuffer.allocate(128);
ByteBuffer body   = ByteBuffer.allocate(1024);

//write data into buffers

ByteBuffer[] bufferArray = { header, body };

channel.write(bufferArray);

  只有在position和limit之間的數據會被寫入到channel中,適合動態數據 

Java NIO Scatter/Gather(五)