原文連接:http://tutorials.jenkov.com/java-nio/scatter-gather.html,若有侵權,立刪html
Java NIO引入了 Scatter 和 Gather,這兩個概念使用於向channel寫入數據和從channel讀取數據用的。java
scattering是和讀操做有關的,channel將數據讀取到多個buffer中去,channel分散數據到多個buffer中。spa
gathering是個寫操做有關的,將多個buffer中的數據寫入到channel中去。code
scattering和gathering是很是有用的,在一些情形下。例如你須要傳輸不一樣的數據模塊。htm
一個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
上圖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