Netty NIO之ByteBuffer

最重要的四個指標:

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;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章