Java NIO Scatter/Gather(五)

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

Java NIO Scatter/Gather

  • Scattering Reads
  • Gathering Writes 

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

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

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

  scattering和gathering是很是有用的,在一些情形下。例如你須要傳輸不一樣的數據模塊。htm

 scattering Reads

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

                        

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不適合動態數據,適合固定的數據大小的寫入。get

 Gathering Writes 

  上圖it

                        

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

//write data into buffers

ByteBuffer[] bufferArray = { header, body };

channel.write(bufferArray);

 

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

相關文章
相關標籤/搜索