国产探花免费观看_亚洲丰满少妇自慰呻吟_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;}


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 阳高县| 灵丘县| 岫岩| 罗平县| 安平县| 赤峰市| 和林格尔县| 榆林市| 安图县| 阳新县| 雷山县| 黄骅市| 井冈山市| 玉树县| 皋兰县| 方城县| 钦州市| 进贤县| 准格尔旗| 达拉特旗| 冀州市| 台江县| 安义县| 将乐县| 化隆| 都昌县| 宾川县| 新民市| 漠河县| 彰武县| 武邑县| 泾川县| 滦南县| 固原市| 金堂县| 徐州市| 镇康县| 镇康县| 潞西市| 习水县| 习水县|