標籤:city 三種方式 子類 static 分配 text 有一個 初始設定 1.5
Java NIO 緩衝區Buffer(二)緩衝區的建立
建立緩衝區的方式
建立方式存在兩種:
1. allocate方式
2. wrap方式
allocate方式
CharBuffer charBuffer = CharBuffer.allocate(10);
Buffer下的每一個子類都有allcate方法,以CharBuffer為例,它將隱含的從堆空間中分配一個char型數組作為備份儲存空間來儲存10個char變數。
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()函數的話數組內的值也會跟著改變,相反,如果我們對數組進行資料變動,那麼緩衝區也一樣會受到影響。
另外wrap還有一個重載的方法,可以提供設定position和limit的值。
CharBuffer charBuffer = CharBuffer.wrap(buffer,2,3);
代碼會建立出一個position是2,limit是5,capacity為10的Buffer。注意這隻是初始設定,後續你也可以改變它。
HeapCharBuffer(char[] buf, int off, int len) { // package-private super(-1, off, off + len, buf.length, buf, 0); /* hb = buf; offset = 0; */ }
緩衝區的複製
主要有三種方式:
duplicate方法
asReadOnlyBuffer方法
slice方法
duplicate方法
建立出一個原有緩衝區的拷貝(產生一個新的緩衝區對象),但是兩個都是共用資料元素,修改一個對另一個可見。但是上界,容量,和位置屬性都是特有的。
asReadOnlyBuffer方法
顧名思義,複製的是一個唯讀緩衝區。與duplicate沒什麼區別。不能修改。
slice方法
用於分割緩衝區,建立一個從原始緩衝區的當期位置開始的新緩衝區,其容量是原始緩衝區的剩餘元素數量。
Java NIO 緩衝區Buffer(二)緩衝區的建立