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...