New I/O 1章 バッファ
- 1.1. New I/O の概要
- 1.2. バッファ
- 1.3. バッファの作成方法
- 1.4. バッファの位置プロパティ
- 1.5. バッファの読み書き
- 1.6. ダイレクトバッファ
- 1.7. MappedByteBuffer
- 1.8. メモリ領域の割り当て
1.3. バッファの作成方法
バッファの作成する方法は大きく分けて3種類あります。
1. 新たに容量を割り当ててバッファを作成する
バッファクラスのstaticメソッドであるallocateメソッドを使用します。たとえば、新しいIntBufferを作るには次のようにします。引数には作成するバッファの容量(capacity)を指定します。
IntBuffer buffer = IntBuffer.allocate(100);
2. 既存の配列や文字列をラップしてバッファを作成する
バッファクラスのstaticメソッドであるwrapメソッドを使用します。
たとえばLongBufferクラスには次のメソッドが存在します。offsetとlengthで配列の一部分に対するバッファも作成することができます。
static LongBuffer wrap(double[] array) static LongBuffer wrap(double[] array, int offset, int length)
CharBufferクラスはString型やStringBuffer型の文字列をラップするメソッドも用意されています。
static CharBuffer wrap(CharSequence csq) static CharBuffer wrap(CharSequence csq, int start, int end)
CharSequenceは文字列を表すインタフェースです。String、StringBuffer、CharBufferがCharSequenceを実装しています。CharSequenceはJDK1.4で導入されたインタフェースです。
3. 既存のbyteバッファに対するビューを作成する
ByteBufferクラスには、各プリミティブ型バッファのビューを作成するためのメソッドが用意されています。元のByteBufferとビューである各プリミティブ型のバッファは同じ記憶域を共有します。ただし、次の項で説明する「位置」や「リミット」等のプロパティはそれぞれ独立して持っています。
CharBuffer asCharBuffer() DoubleBuffer asDoubeBuffer() FloatBuffer asFloatBuffer() IntBuffer asIntBuffer() LongBuffer asLongBuffer() ShortBuffer asShortBuffer()