Java NIO 支持 分散/聚合模式,分散/聚合用於Channel的讀取和寫入數據。
分散Read
從單一Channel分散讀取數據進入多個Buffer。
偽代碼:
ByteBuffer header = ByteBuffer.allocate(128);
ByteBuffer body = ByteBuffer.allocate(1024);
ByteBuffer[] bufferArray = { header, body };
channel.read(bufferArray);
分散Reader,當第一個Buffer滿了,會移動到下一個。
聚集Writer
聚集Writer,表示可以從多個Buffer中寫入到單個Channel中。看下面的圖:
偽代碼:
ByteBuffer header = ByteBuffer.allocate(128);
ByteBuffer body = ByteBuffer.allocate(1024);
//write data into buffers
ByteBuffer[] bufferArray = { header, body };
channel.write(bufferArray);
將Buffer數組放入writer()方法內,第一個Buffer寫滿了,後面進行第二個Buffer寫入。如果設置128個字節,實際上就58字節,那麼實際上寫入的就是這58個字節。
本文參考:http://tutorials.jenkov.com/java-nio/scatter-gather.html
閱讀更多 全棧獨立開發者 的文章