Java NIO Scatter/Gather(五)
阿新 • • 發佈:2018-11-26
有關 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(五)