国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

Java NIO (三)-分散(Scatter)/聚集(Gather)

2019-11-06 06:13:09
字體:
來源:轉載
供稿:網友
分散和聚集 I/O 是使用多個(數組)而不是單個緩沖區進行數據讀/寫; 分散(Scatter)從通道中讀取數據時寫入多個緩沖區中,通道將數據“分散”到多個緩沖區中; 

聚集(Gather)寫入通道時將多個緩沖區的數據寫入同一個通道,通道將多個緩沖區數據“聚集”到一起;

scatter / gather經常用于需要將傳輸的數據分開處理的場合,例如傳輸一個由消息頭和消息體組成的消息,你可能會將消息體和消息頭分散到不同的buffer中,這樣你可以方便的處理消息頭和消息體。

Scattering Reads 

Scattering Reads是指數據從一個channel讀取到多個buffer中。如下圖描述: 

注意buffer首先被插入到數組,然后再將數組作為channel.read() 的輸入參數。read()方法按照buffer在數組中的順序將從channel中讀取的數據寫入到buffer,當一個buffer被寫滿后,channel緊接著向另一個buffer中寫。 

支持分散讀取的通道需要繼承實現ScatteringByteChannel接口:

public interface ScatteringByteChannel extends ReadableByteChannel{    public long read(ByteBuffer[] dsts, int offset, int length)        throws IOException;    public long read(ByteBuffer[] dsts) throws IOException;}

Gathering Writes 

Gathering Writes是指數據從多個buffer寫入到同一個channel。如下圖描述:

buffers數組是write()方法的入參,write()方法會按照buffer在數組中的順序,將數據寫入到channel,注意只有position和limit之間的數據才會被寫入。因此,如果一個buffer的容量為128byte,但是僅僅包含58byte的數據,那么這58byte的數據將被寫入到channel中。因此與Scattering Reads相反,Gathering Writes能較好的處理動態消息。 

支持聚集寫入的通道需要繼承實現GatheringByteChannel接口:

public interface GatheringByteChannel  extends WritableByteChannel{    public long write(ByteBuffer[] srcs, int offset, int length)        throws IOException;    public long write(ByteBuffer[] srcs) throws IOException;}


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 蒙自县| 安龙县| 景德镇市| 广东省| 武川县| 云和县| 谷城县| 武汉市| 清水河县| 辽宁省| 苍梧县| 重庆市| 巩义市| 全椒县| 浦江县| 塘沽区| 仲巴县| 郯城县| 闽清县| 两当县| 石门县| 上虞市| 绵竹市| 句容市| 冕宁县| 贵南县| 和龙市| 栖霞市| 阳新县| 通榆县| 昌都县| 义马市| 谢通门县| 绥滨县| 象州县| 永平县| 历史| 深泽县| 永平县| 溆浦县| 霍邱县|