Java NIO 緩衝區Buffer(二)緩衝區的建立

建立緩衝區的方式java

建立方式存在兩種:數組

1. allocate方式函數

2. wrap方式spa

allocate方式

CharBuffer charBuffer = CharBuffer.allocate(10);

Buffer下的每個子類都有allcate方法,以CharBuffer爲例,它將隱含的從堆空間中分配一個char型數組做爲備份存儲器來存儲10個char變量。code

public static CharBuffer allocate(int capacity) { if (capacity < 0) throw new IllegalArgumentException(); return new HeapCharBuffer(capacity, capacity); } HeapCharBuffer(int cap, int lim) {            // package-private
 
            super(-1, 0, lim, cap, new char[cap], 0); /* hb = new char[cap]; offset = 0; */ }

wrap方式

wrap方式更靈活一點,它能夠提供本身定義的數組取用做緩衝區備份存儲器。對象

1         char[] buffer = new char[10]; 2         CharBuffer charBuffer = CharBuffer.wrap(buffer);

這種方式也能返回一個CharBuffer對象,不過它的數據元素確是存儲在數組中,咱們知道因爲數組的特性,若是咱們調用put()函數的話數組內的值也會跟着改變,相反,若是咱們對數組進行數據變更,那麼緩衝區也同樣會受到影響。blog

另外wrap還有一個重載的方法,能夠提供設置position和limit的值。ci

CharBuffer charBuffer = CharBuffer.wrap(buffer,2,3);

代碼會建立出一個position是2,limit是5,capacity爲10的Buffer。注意這只是初始設置,後續你也能夠改變它。it

HeapCharBuffer(char[] buf, int off, int len) { // package-private
 
            super(-1, off, off + len, buf.length, buf, 0); /* hb = buf; offset = 0; */ }

 

緩衝區的複製

主要有三種方式:io

duplicate方法

asReadOnlyBuffer方法

slice方法

duplicate方法

建立出一個原有緩衝區的拷貝(產生一個新的緩衝區對象),可是兩個都是共享數據元素,修改一個對另外一個可見。可是上界,容量,和位置屬性都是特有的。

asReadOnlyBuffer方法

顧名思義,複製的是一個只讀緩衝區。與duplicate沒什麼區別。不能修改。

 

slice方法

用於分割緩衝區,建立一個從原始緩衝區的當期位置開始的新緩衝區,其容量是原始緩衝區的剩餘元素數量。

相關文章
相關標籤/搜索