ScatteringByteChannel和GatheringByteChannel

分散和集聚 通道

分散/聚集 I/O 是使用多個而不是單個緩衝區來保存數據的讀寫方法。

一個分散的讀取就像一個常規通道讀取,只不過它是將數據讀到一個緩衝區數組中而不是讀到單個緩衝區中。同樣地,一個聚集寫入是向緩衝區數組而不是向單個緩衝區寫入數據。

分散/聚集 I/O 對於將數據流劃分爲單獨的部分很有用,這有助於實現複雜的數據格式。

源代碼如下:

 

這些 long read() 方法很像標準的 read 方法,只不過它們不是取單個緩衝區而是取一個緩衝區數組。

在 分散讀取 中,通道依次填充每個緩衝區。填滿一個緩衝區後,它就開始填充下一個。在某種意義上,緩衝區數組就像一個大緩衝區。

分散/聚集 I/O 對於將數據劃分爲幾個部分很有用。例如,您可能在編寫一個使用消息對象的網絡應用程序,每一個消息被劃分爲固定長度的頭部和固定長度的正文。您可以創建一個剛好可以容納頭部的緩衝區和另一個剛好可以容難正文的緩衝區。當您將它們放入一個數組中並使用分散讀取來向它們讀入消息時,頭部和正文將整齊地劃分到這兩個緩衝區中。

我們從緩衝區所得到的方便性對於緩衝區數組同樣有效。因爲每一個緩衝區都跟蹤自己還可以接受多少數據,所以分散讀取會自動找到有空間接受數據的第一個緩衝區。在這個緩衝區填滿後,它就會移動到下一個緩衝區。


 

 

ScatteringByteChannel是一個藉口,對應的File流、TCP、UDP及管道有四個實現,FileChannel、DatagramChannel、SocketChannel及Pipe$SourceChannel,分別在不同場景使用。

 


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章