Java NIO 之緩衝區

2021-08-02 09:22:32 字數 1834 閱讀 1581

1、緩衝區(buffer)

在nio中負責資料的訪問。緩衝區就是陣列,用於儲存不同資料型別的資料,根據資料型別不同(boolean除外),提供了相應型別的緩衝區:bytebuffer,charbuffer,shortbuffer,intbuffer,longbuffer,floatbuffer,doublebuffer。

①管理方式基本一致,通過allocate()獲取緩衝區

bytebuffer buf = bytebuffer.allocate(512);

②緩衝區訪問資料的方法:

put():存入資料到緩衝區

get():獲取緩衝區中的資料

③緩衝區四個核心屬性

capacity:容量,緩衝區中最大的儲存容量,一旦宣告不能改變。

limit:界限,緩衝區中可以運算元據的大小,(limit後的資料不能讀寫)

position:位置,緩衝區中正在操作的位置

mark:標記,表示記錄當前position的位置。可以通過reset()恢復到mark的位置

mark <= position <= limit <= capacity

測試**:

string str = "12345";

bytebuffer buf = bytebuffer.allocate(512);//分配制定大小的緩衝區

system.out.println(buf.position());//0

system.out.println(buf.limit());//512

system.out.println(buf.capacity());//512

buf.put(str.getbytes());//將資料放入緩衝區

system.out.println(buf.position());//5

system.out.println(buf.limit());//512

system.out.println(buf.capacity());//512

buf.flip();//切換成讀取資料模式

system.out.println(buf.position());//0

system.out.println(buf.limit());//5

system.out.println(buf.capacity());//512

byte des = new byte[buf.limit()];

buf.get(des);//讀取緩衝區資料

system.out.println(new string(des,0,des.length));//12345

system.out.println(buf.position());//5

system.out.println(buf.limit());//5

system.out.println(buf.capacity());//512

buf.rewind();//可重複讀

system.out.println(buf.position());//0

system.out.println(buf.limit());//5

system.out.println(buf.capacity());//512

buf.clear();//清空緩衝區,但是緩衝區的資料依然存在,處於「被遺忘」狀態

system.out.println(buf.position());//0

system.out.println(buf.limit());//512

system.out.println(buf.capacity());//512

system.out.println((char) buf.get());//1 說明資料依然存在

Java NIO 之 Buffer緩衝區

容量 capacity 緩衝區能夠容納的資料元素的最大數量。這一容量在緩衝區建立時被設定,並且永遠不能被改變 上界 limit 緩衝區的第乙個不能被讀或寫的元素。或者說,緩衝區中現存元素的計數。要是position已經到達limit的位置,此時再呼叫get 方法會報indexoutofbound c...

Java NIO 三 緩衝區Buffer

緩衝區本質上是一塊可以寫入資料,然後可以從中讀取資料的記憶體。這塊記憶體被包裝成nio buffer物件,並提供了一組方法,用來方便的訪問該塊記憶體。capacity capacity代表著buffer的固定大小值,能存放的最大值不超過capacity。position limit mark buf...

javaNIO學習筆記之緩衝區Buffer

buffer有四個屬性 1 capacit 容量 2 limit 上界 3 position 位置 4 mark 標記 絕對儲存不會影響緩衝區的位置屬性 存和取的方法 public abstract byte get public abstract byte get int index public...