ByteBuf
Java原生ByteBuffer
使用Buffer讀寫數據一般遵循以下四個步驟:
- 寫入數據到Buffer(寫)
- 調用
flip()
方法(寫->讀) - 從Buffer中讀取數據(讀)
- 調用
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爲標記位置 |
缺點
- 通過position和limit控制讀寫的範圍不直觀
- 讀寫模式切換需要調用對應方法,若不調用對應方法切換讀寫模式,會產生混亂
- 無法動態擴容