IO模型 NIO緩衝區

2021-10-08 14:13:16 字數 1351 閱讀 2930

緩衝區(buffer):

緩衝區本質上是一塊可以寫入資料,然後可以從中讀取資料的記憶體(底層是陣列)。這塊記憶體被包裝成nio buffer物件,並提供了一組方法,用來方便的訪問該塊記憶體。

理解buffer的工作原理,需要熟悉它的三個屬性:

capacity

容量,即可以容納的最大資料量;在緩衝區建立時被設定並且不能改變.設定後只能往裡寫capacity個byte、long,char等型別。一旦buffer滿了,需要將其清空(通過讀資料或者清除資料)才能繼續寫資料往裡寫資料。

position

表示緩衝區的當前操作位置,

當你寫資料到buffer中時,position表示當前的位置。初始的position值為0.當乙個byte、long等資料寫到buffer後, position會向前移動到下乙個可插入資料的buffer單元。position最大可為capacity – 1.

當讀取資料時,也是從某個特定位置讀。當將buffer從寫模式切換到讀模式,position會被重置為0. 當從buffer的position處讀取資料時,position向前移動到下乙個可讀的位置。

limit:

表示緩衝區的當前終點,不能對緩衝區超過極限的位置進行讀寫操作。且極限是可以修改的 在寫模式下,buffer的limit表示你最多能往buffer裡寫多少資料。 寫模式下,limit等於buffer的capacity。

當切換buffer到讀模式時, limit表示你最多能讀到多少資料

使用buffer讀寫資料一般遵循以下四個步驟:

讀寫資料到buffer有兩種方式:

從channel寫到buffer。

//寫入資料到channel

int bytesread = inchannel.read(buf); //read into buffer.

//讀取資料到channel

int byteswritten = inchannel.write(buf);

通過buffer的put()和get() 方法讀寫到buffer裡。

buf.put(127);

byte abyte = buf.get();

示例

public static void main(string args) throws exception 

//5、清空快取區

buf.clear(); //make buffer ready for writing

//4、從buffer中讀取資料

bytesread = inchannel.read(buf);

} afile.close();

}

nio學習01 緩衝區

緩衝區是包在乙個物件內的基本資料元素陣列。buffer類似相比乙個簡單的陣列優點是它將關於資料的資料內容和資訊包含在乙個單一的物件中。buffer類似及它專有的子類定義了乙個用於處理緩衝區的api。他的本質是一塊可以寫入資料,然後可以從中讀取資料的記憶體。這塊記憶體被包裝成nio物件,並提供了一組方...

NIO 筆記二 緩衝區

乙個 buffer 物件是固定數量的資料的容器。其作用是乙個儲存器,或者分段運輸區,在這裡資料可被儲存並在之後用於檢索。對於每個非布林原始資料型別都有乙個緩衝區類。儘管緩衝區作用於它們儲存的原始資料型別,但緩衝區十分傾向於處理位元組。非位元組緩衝區可以在後台執行從位元組或到位元組的轉換,這取決於緩衝...

I O 基礎之緩衝區

緩衝區以及緩衝區是如何工作,是所有i o的基礎。輸入 輸出 就是把資料移進或移出緩衝區。程序執行i o操作,就是向作業系統發出請求,讓它要麼把緩衝區的資料排乾 寫 要麼用資料把緩衝區填滿 讀 程序使用這一機制處理所有資料進出操作。從磁碟讀資料到程序記憶體區 程序使用read 系統呼叫,要求其緩衝區被...