Java NIO 入門學習 通道和緩衝區

2021-08-26 01:14:18 字數 775 閱讀 8801

對於 nio 來說,channel(通道) 和 buffer(緩衝區) 這兩個東西是不得不提的,因為它們是 nio 的核心物件,幾乎每乙個 i/o 操作都要它們。

通道是對原 i/o 流的模擬,但有不同的是它是雙向的,不再像流那樣分 inputstream 和 outputstream,通道的雙向性更好的反映了底層作業系統的真識情況。也不能像原 i/o 那樣可以直接往流裡寫或讀資料,在通道了傳輸資料必須經由緩衝區。有點類似原 i/o 流通過過濾器流 bufferedinputstream 和 bufferedoutputstream 來讀寫資料。

fileinputstream/fileoutputstream/randomaccessfile/datagramsocket/serversocket/socket 的 getchannel() 方法可以獲得相應型別的 channel,channel 的型別有 filechannel/socketchannel/selectablechannel/datagramchannel/serversocketchannel 等。

在通道上的讀寫都會關聯上緩衝區,如 filechannel.read(bytebuffer dst)、filechannel.write(bytebuffer src);對檔案的鎖也是在通道上的操作,如 filechannel.lock()、filechannel.trylock()。

下面是 nio 和原 io 的一些概念對比:

其他的如 socketchannel 網路通道還未述及,理解了 nio 通道和緩衝區的概念之後,我們就可以使用 nio 來對檔案進行讀寫操作了。

Java NIO 入門二 使用通道複製檔案

nio相對於io來說,增加了乙個通道的 channel public static void test3 throws exception outchannel.close inchannel.close fileoutputstream.close fileinputstream.close 首先...

Java NIO 通道(二)通道分散 聚集

基於通道,nio又提供了另乙個重要功能,分散 scatter 和聚集 gather scatter 分散 指的是從通道中讀取 read 資料分散到多個緩衝區buffer中,該過程會將每個緩衝區填滿,直到通道中無資料或者緩衝區沒有空間。gather 聚集 指的是將多個緩衝區buffer聚集起來寫入 w...

通道和緩衝區

通常來說nio中的所有io都是從channel開始的。channel和流有點類似。通過channel,我們即可以從channel把資料寫到buffer中,也可以把資料從buffer寫入到channel,下圖是乙個示意圖 通道可以理解成一種連線,根據連線物件的不同,可以分為下面這些型別 檔案連線 fi...