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.4. バッファの位置プロパティ
バッファは、サイズや読み書きする位置に関する4つのプロパティ(属性値)を持っています。
プロパティ
|
説明
|
容量(capacity) |
バッファ内の要素数を表します。バッファの作成時に決定され、後から変更されることはありません。capacity()メソッドにより値を取得することができます。 |
リミット(limit)
|
読み書きしてはいけないバッファ領域のはじまりの位置を表します。必ず「容量」以下の値になります。limit()メソッドにより値を取得することができ、limit(int newLimit)メソッドにより値を設定できます。 |
位置(position)
|
次に読み書きを行う位置を表します。必ず「リミット」以下の値となります。position()メソッドにより値を取得することができ、position(int newPosition)メソッドにより値を設定できます。 |
マーク(mark)
|
マークには現在位置を記憶させることができます。マークした位置にあとから移動することができます。必ず「位置」以下の値となります。mark()メソッドにより現在の「位置」にマークが設定され、reset()メソッドにより以前マークしたところに「位置」を移動することができます。 |
これらのプロパティの大小関係は次のようになります。
0 ≦ マーク ≦ 位置 ≦ リミット ≦ 容量
1.5. バッファの読み書き
バッファを読み書きするメソッドは次のように分類することができます。
- 読み込みを行うものと書き込みを行うもの
- 単一の値を扱うものと複数の値を一括して扱うもの
- 相対位置に対して操作するものと絶対位置に対して操作するもの
これらの組み合わせでさまざまなメソッドが存在します。たとえばIntBufferには次のようなメソッドが存在します。
種類
|
メソッド定義
|
相対get |
int get() |
相対一括get
|
IntBuffer get(int[] dst) |
絶対get
|
int get(int index) |
相対put
|
IntBuffer put(int i) |
相対一括put
|
IntBuffer put(int[] src) IntBuffer put(int[] src, int offset, int length) IntBuffer put(IntBuffer src) |
絶対put |
IntBuffer put(int index, int i) |
ここで、戻り値の型がIntBufferのものがあることに注意してください。本来戻り値の必要のないと考えられるメソッドは、戻り値として自分自身のバッファを返すようになっています。このことにより、たとえば次のように連続した操作を1つの文で記述することができます。
buffer.put(100).put(200).put(300);
相対操作はバッファの位置(position)に対して行われ、位置は操作が行われた分だけ移動します。