調用 allocate(capacity) 返回 HeapCharBuffer,緩存空間在 JVM 堆中(char[] hb)。示例:
CharBuffer bf = CharBuffer.allocate(10);
注意:ByteBuffer 還有 allocateDirect 分配直接內存(堆外),調用 hasArray() 返回 false。
調用 wrap(array) 返回 HeapCharBuffer,緩存空間使用外部傳入數組。示例:
char[] myArray = new char[10];
CharBuffer charbuffer = CharBuffer.wrap(myArray);
重載方法 wrap(array, offset, length) 可指定起始位置和長度,創建的 Buffer:position = offset, limit = offset+length, capacity = array.length。
創建原緩衝區拷貝,共享數據元素,但 position、limit、capacity 等屬性獨立。修改其中一個的元素會影響另一個。
CharBuffer charbuffer1 = CharBuffer.allocate(10);
CharBuffer charbuffer2 = charbuffer1.duplicate();
charbuffer1.put('a').put('b').put('c');
charbuffer1.flip();
System.out.println(charbuffer1); // abc
System.out.println(charbuffer2); // abc
生成只讀緩衝區,與 duplicate 類似,但對其 put 操作拋出 ReadOnlyBufferException。
創建從原緩衝區當前 position 開始的新緩衝區,容量為 limit - position,共享數據序列。示例:
CharBuffer charbuffer1 = CharBuffer.allocate(10);
charbuffer1.position(2).limit(5);
CharBuffer charbuffer2 = charbuffer1.slice();
// charbuffer1: pos=2, lim=5, cap=10
// charbuffer2: pos=0, lim=3, cap=3