建立緩衝區的方式java
建立方式存在兩種:數組
1. allocate方式函數
2. wrap方式spa
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方式更靈活一點,它能夠提供本身定義的數組取用做緩衝區備份存儲器。對象
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沒什麼區別。不能修改。
用於分割緩衝區,建立一個從原始緩衝區的當期位置開始的新緩衝區,其容量是原始緩衝區的剩餘元素數量。