(三)NIO緩衝區Buffer類的使用

2022-09-08 01:15:15 字數 1554 閱讀 5270

1、由於buffer及其7個子類都是抽象類,所以不能被直接new例項化,緩衝區的建立有兩種方式:

(1)allocate方式:建立乙個指定容量的新陣列作為緩衝區的儲存空間。

(2)wrap方式:將自定義的已有陣列作為快取區的儲存空間。

例:bytebuffer bytebuffer = bytebuffer.allocate(200);

bytebuffer bytebuffer = bytebuffer.wrap(new byte );

2、緩衝區中存在4個核心技術點:

(1)capacity(容量):緩衝區包含元素的數量,它不能為負數,也不能更改。

(2)limit(限制):代表第乙個不應該讀取或寫入元素的index。

(3)position(位置):代表下乙個要讀取或寫入元素的index。

(4)mark(標記):乙個index,非必須設定,不能大於position,如果大於則mark被丟棄(值為-1)。

它們之間的大小關係:0 <= mark <= position <= limit <= capacity

3、capacity相關

int capacity():返回此緩衝區的容量。

4、limit相關

(1)int limit():返回此緩衝區的限制。

(2)buffer limit(int newlimit):設定此緩衝區的限制。

(3)limit的使用場景是當反覆向緩衝區中儲存資料時,可以設定limit來限制讀取資料的範圍。

5、position相關

(1)int position():返回此緩衝區的位置。

(2)buffer position(int newposition):設定此緩衝區新的位置。

(3)int remaining():返回緩衝區剩餘空間大小,即limit - position。

6、mark相關

(1)buffer mark():在此緩衝區的位置設定標記。

(2)buffer reset():將緩衝區的position重置為mark。如果未定義mark,則呼叫此方法時會丟擲invalidmarkexception異常。

7、直接緩衝區和非直接緩衝區

(1)allocatedirect(int capacity):建立直接緩衝區,將緩衝區建立在物理記憶體中。

(2)allocate(int capacity):建立非直接緩衝區,將緩衝區建立在jvm記憶體(堆記憶體)中。

(3)非直接緩衝區需要應用程式通過jvm記憶體和物理記憶體互動來讀取資料,而直接緩衝區則是應用程式和作業系統直接通訊,提高程式執行的效率。

非直接緩衝區:

直接緩衝區:

8、duplicate()方法(複製緩衝區)和slice()方法(截斷緩衝區)都會建立新的緩衝區物件,但是新緩衝區使用的還是原緩衝區中的陣列來儲存資料,所以任一緩衝區內容的變更互相可見。

NIO學習筆記之緩衝區Buffer

buffer有四個屬性 1 capacit 容量 2 limit 上界 3 position 位置 4 mark 標記 絕對儲存不會影響緩衝區的位置屬性 存和取的方法 public abstract byte get public abstract byte get int index public...

Java NIO 三 緩衝區Buffer

緩衝區本質上是一塊可以寫入資料,然後可以從中讀取資料的記憶體。這塊記憶體被包裝成nio buffer物件,並提供了一組方法,用來方便的訪問該塊記憶體。capacity capacity代表著buffer的固定大小值,能存放的最大值不超過capacity。position limit mark buf...

Java NIO 之 Buffer緩衝區

容量 capacity 緩衝區能夠容納的資料元素的最大數量。這一容量在緩衝區建立時被設定,並且永遠不能被改變 上界 limit 緩衝區的第乙個不能被讀或寫的元素。或者說,緩衝區中現存元素的計數。要是position已經到達limit的位置,此時再呼叫get 方法會報indexoutofbound c...