* 可參見 Java 中的 IO 與 socket 編程 [ 復習 ]
ByteBuffer 數據類型的說明
public abstract class ByteBuffer { // buff即內部用於緩存的數組 final byte[] hb; //為某一讀過的位置做標記,便於某些時候回退到該位置 private int mark = -1; //當前讀取的位置 private int position = 0; //寫數據時,與capacity相等,讀數據時,代表buffer中有效數據的長度。 private int limit; //初始化時候的容量,固定不變 private int capacity; //注: 此表達式總是成立: mark <= position <= limit <= capacity //... }
常見方法:
① allocate
創建一個指定capacity的buffer
ByteBuffer buf = ByteBuffer.allocate(4);
hb = new byte[4] mark = -1 position = 0 limit = 4 capacity = 4
② put
寫模式下,將position移動一位, 再往buffer里寫一個字節
buf.put((byte)1);
position = 1 hb[0] = 1
③ flip
寫完數據,需要開始讀的時候,將position復位到0,並將limit設置為當前position
buf.flip();
imit = position; position = 0; mark = -1;
④ get
將position移動一位,並從buffer里讀一個字節
buf.get();`
position = 1 hb[0]
⑤ clear
讀完數據,需要重新寫的時候,將position置為0,limit復位到capacity
buf.clear();
position = 0; limit = capacity; mark = -1;
⑥ mark & reset
mark() 用於標記
buf.mark();
mark = position;
reset() 用於回到標記
buf.reset();
position = mark;
附圖:
233