基於通道,nio又提供了另乙個重要功能,分散(scatter)和聚集(gather)。
scatter(分散):指的是從通道中讀取(read)資料分散到多個緩衝區buffer中,該過程會將每個緩衝區填滿,直到通道中無資料或者緩衝區沒有空間。
gather(聚集):指的是將多個緩衝區buffer聚集起來寫入(write)通道的過程,類似於將多個緩衝區的內容鏈結起來寫入通道。
public inte***ce scatteringbytechannel extends readablebytechannel
public inte***ce gatheringbytechannel extends writablebytechannel
1. 分散和聚集都是以緩衝區為入參
2. offset和length引數是read和write方法可以使用的緩衝區的子集,它不是乙個簡單的位移和長度,而是指的是緩衝區陣列的索引和需要使用的緩衝區數量。
bytebuffer header = bytebuffer.allocate(10);
bytebuffer body = bytebuffer.allocate(40);
bytebuffer bufferarray = ;
channel.write(bufferarray);
寫入時會將header和body內的資料寫入到通道。寫入時需要根據position和limit的位置來寫入header和body中的資料。
讀取時會將通道的資料寫入到buffer中,當乙個buffer滿了之後,會寫入到另乙個buffer中。假設通道中有48個位元組,那麼10個位元組寫入到header中,剩下的38位元組寫入body中。
int bytesread = channel.write (fivebuffers, 1, 3);
fivebuffers有5個buffer陣列,引數1和3代表了將使用下標是1開始的3個緩衝區,也就是第二個,第三個和第四個緩衝區。 Java NIO 入門二 使用通道複製檔案
nio相對於io來說,增加了乙個通道的 channel public static void test3 throws exception outchannel.close inchannel.close fileoutputstream.close fileinputstream.close 首先...
Java NIO 入門學習 通道和緩衝區
對於 nio 來說,channel 通道 和 buffer 緩衝區 這兩個東西是不得不提的,因為它們是 nio 的核心物件,幾乎每乙個 i o 操作都要它們。通道是對原 i o 流的模擬,但有不同的是它是雙向的,不再像流那樣分 inputstream 和 outputstream,通道的雙向性更好的...
通訊系統之通道(二)
上篇博文講到了 通訊系統之通道 一 下面繼續介紹信道相關知識 無線通道較之於有線通道,複雜的原因在於多徑與時變,不過有兩種情況可以使無線通道變得簡單,那就是相干頻寬和相干時間 由於多徑傳輸的原因,假如在傳送端傳送乙個窄的脈衝訊號,在接收端會接收多個脈衝,本來最短時延是沿最短路徑傳輸所消耗的時間,現在...