ByteBuf

ByteBuf

Java原生ByteBuffer

使用Buffer讀寫數據一般遵循以下四個步驟:

  1. 寫入數據到Buffer(寫)
  2. 調用flip()方法(寫->讀)
  3. 從Buffer中讀取數據(讀)
  4. 調用clear()方法或者compact()方法(讀->寫)

屬性

屬性名

說明

byte[] buff 內部用於緩存的數組。
position 當前讀取的位置。
limit 讀寫的上限,limit<=capacity。

capacity

初始化時候的容量。
mark 爲某一讀過的位置做標記,便於某些時候回退到該位置。

讀寫模式圖解

put

ByteBuffer創建後即爲寫模式,該模式下,往buffer裏寫一個字節,並把postion移動一位。寫模式下,一般limit與capacity相等。

 

flip

寫完數據,需要開始讀的時候,將postion復位到0,並將limit設爲當前postion。 

get

從buffer裏讀一個字節,並把postion移動一位。上限是limit,即寫入數據的最後位置。 

 

相關方法

ByteBuffer無論讀寫,範圍都是從position~limit,因此讀寫模式進行切換時需要修改position和limit的值。

 

方法

說明

put

get

flip

寫模式->讀模式(limit=position;position=0)

rewind 將position設爲0,可以重讀Buffer中的數據

clear

讀模式->寫模式(忽略未讀數據)。恢復到初始狀態,接下來可進行寫操作

compact

讀模式->寫模式(不忽略未讀數據)。將未讀數據拷貝到Buffer起始處。將position設到最後一個未讀元素正後面。

mark

標記當前position

reset

重置position爲標記位置

缺點

  1. 通過position和limit控制讀寫的範圍不直觀
  2. 讀寫模式切換需要調用對應方法,若不調用對應方法切換讀寫模式,會產生混亂
  3. 無法動態擴容

 

參考

  1. Java NIO系列教程(三) Buffer
  2. Java NIO 的前生今世 之三 NIO Buffer 詳解
  3. Java NIO學習筆記之二-圖解ByteBuffer
  4. ByteBuf:Netty的數據容器
發佈了266 篇原創文章 · 獲贊 201 · 訪問量 48萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章