最重要的四個指標:
Capacity: 當前ByteBuffer的容量
Position:當前模式下的位置 (寫:寫到什麼位置了,讀:讀到什麼位置了)
Limit: 當前模式下的限制位置(寫:寫到這不能繼續再寫了。再寫就報錯,讀:讀到這就沒有了,再讀就打你)
Mark: 記錄下當前的狀態,以便於迴歸。
重要的幾個方法:
flip:
就是狀態模式的轉換,寫轉讀。 就是通過修改position,limit來進行的。
public final Buffer flip() {
limit = position; // 設置讀取上限
position = 0; // 重置 position
mark = -1; // 清空 mark
return this;
}
rewind:倒帶,從它的代碼中就能看出來,這個操作知識重置了postion的值,對於limit並沒有修改,證明對於操作的位置還是有限制的,這樣就更適用於讀,如果是適用於寫的話,應該將 capacity賦值給limit
public final Buffer rewind() {
position = 0; // 重置 position
mark = -1; // 清空 mark
return this;
}
clear: 上面剛說完適用於讀恢復的操作,下面就是寫恢復的操作。
public final Buffer clear() {
position = 0; // 重置 position
limit = capacity; // 恢復 limit 爲 capacity
mark = -1; // 清空 mark
return this;
}
mark,reset:
mark就是給當前byteBuffer標記一個狀態,記錄此時的postion的值,reset就是在一系列操作之後,能根據mark進行恢復當時的狀態將 mark的值賦值給position
public final Buffer mark() {
mark = position;
return this;
}
public final Buffer reset() {
int m = mark;
if (m < 0)
throw new InvalidMarkException();
position = m;
return this;
}