|
JavaTM Platform Standard Ed. 6 |
|||||||||
前のクラス 次のクラス | フレームあり フレームなし | |||||||||
概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |
java.lang.Object java.nio.Buffer
public abstract class Buffer
特定のプリミティブ型データのコンテナです。
バッファーは、特定のプリミティブ型要素のリニアで有限のシーケンスです。コンテンツのほかに、容量、リミット、位置という必須プロパティーがあります。
非ブール型のプリミティブ型には、このクラスのサブクラスが 1 つずつ割り当てられています。
このクラスのサブクラスは、それぞれ次の 2 つのカテゴリに該当する「get」および「put」を定義します。
適切なチャネルの入出力操作を行えば、データの転送 (バッファーとのやりとり) は可能です。この操作は、常に現在位置に対して相対的に行われます。
バッファーの「マーク」は、reset
メソッドを実行したときに戻る位置を指定するインデックスです。定義されていない場合もありますが、定義されている場合は必ず位置以下の正の値になります。位置やリミットの値がマークの値よりも小さい場合、マークは破棄されます。マークが定義されていない状態で reset
メソッドを呼び出すと、InvalidMarkException
がスローされます。
次のインバリアントは、マーク、位置、リミット、容量の値を表します。
0 <= mark <= position <= limit <= capacity
新しく作成されたバッファーの位置は常に 0、マークは未定義です。リミットの初期値は 0 か、バッファーの構築方法や種類によってはそれ以外の値になります。一般に、バッファーの初期コンテンツは未定義です。
位置、リミット、容量の値にアクセスするメソッドや、マークやリセットを行うメソッドと同様に、このクラスもバッファーに対する次のような操作を定義します。
clear()
は、新しい一連のチャネル読み込み操作または相対「put」操作のためにバッファーを準備します。リミットを容量の値に設定し、位置を 0 に設定します。
flip()
は、新規チャネル書き込みシーケンス (相対「get」) のためにバッファーを準備します。リミットの値を現在位置の値に合わせたあと、位置の値を 0 にします。
rewind()
は、すでにバッファー格納されているデータを再度読み込めるように、バッファーを準備します。リミットの値はそのままで、位置の値を 0 にします。
すべてのバッファーは読み込み可能ですが、書き込みも可能であるとは限りません。各バッファークラスの変異メソッドは「省略可能な操作」に指定されており、読み取り専用バッファー上で呼び出されると ReadOnlyBufferException
をスローします。読み取り専用バッファーのコンテンツは変更できません。 しかし、マーク、位置、リミットの値は変更可能です。バッファーが読み取り専用であるかどうかは、isReadOnly
メソッドを呼び出すことで判断できます。
バッファーは、複数の並行スレッドによる使用において安全ではありません。複数のスレッドで使用する場合は、適切な同期処理によってバッファーへのアクセスを制御する必要があります。
このクラスのメソッドのうち戻り値を返さないものは、自身を呼び出したバッファーの情報を返します。これを応用して、メソッド呼び出しを連鎖させることができます。 たとえば次のような文があるとしましょう。
これらは、よりコンパクトな形式の一行で置き換えられます。b.flip(); b.position(23); b.limit(42);
b.flip().position(23).limit(42);
メソッドの概要 | |
---|---|
abstract Object |
array()
現在のバッファーを補助する配列を返します (オプション)。 |
abstract int |
arrayOffset()
現在のバッファーの補助配列内にある、このバッファーの最初の要素のオフセットを返します (オプション)。 |
int |
capacity()
このバッファーの容量を返します。 |
Buffer |
clear()
このバッファーをクリアします。 |
Buffer |
flip()
このバッファーをフリップ (反転) します。 |
abstract boolean |
hasArray()
現在のバッファーがアクセス可能な配列に連動するかどうかを判断します。 |
boolean |
hasRemaining()
現在位置からリミットまでに要素が 1 つでも存在するかどうかを判断します。 |
abstract boolean |
isDirect()
このバッファーがダイレクトバッファーであるかどうかを判断します。 |
abstract boolean |
isReadOnly()
このバッファーが読み取り専用であるかどうかを判断します。 |
int |
limit()
このバッファーのリミットを返します。 |
Buffer |
limit(int newLimit)
このバッファーのリミットを設定します。 |
Buffer |
mark()
このバッファーの現在位置にマークを設定します。 |
int |
position()
このバッファーの位置を返します。 |
Buffer |
position(int newPosition)
このバッファーの位置を設定します。 |
int |
remaining()
現在位置からリミットまでに存在する要素の数を返します。 |
Buffer |
reset()
バッファーの位置を以前にマークした位置に戻します。 |
Buffer |
rewind()
このバッファーをリワインド (巻き戻し) します。 |
クラス java.lang.Object から継承されたメソッド |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
メソッドの詳細 |
---|
public final int capacity()
public final int position()
public final Buffer position(int newPosition)
newPosition
- 新しい位置の値は、現在のリミット以下の負でない値でなければならない
IllegalArgumentException
- newPosition の前提条件が満たされていない場合public final int limit()
public final Buffer limit(int newLimit)
newLimit
- 新しいリミット値は、このバッファーの容量以下の負でない値でなければならない
IllegalArgumentException
- newLimit の前提条件が満たされていない場合public final Buffer mark()
public final Buffer reset()
このメソッドを呼び出しても、マークの値は変更されません。 マークが破棄されることもありません。
InvalidMarkException
- マークが設定されていない場合public final Buffer clear()
一連のチャネル読み込み操作または「put」操作を使用してこのバッファーにデータを格納する前に、このメソッドを呼び出します。例を示します。
buf.clear(); // Prepare buffer for reading in.read(buf); // Read data
このメソッドはバッファー内のデータを実際に消去するわけではありません。 しかし、そうした状況で使用されるため、クリア (clear) と命名されています。
public final Buffer flip()
チャネル読み込み操作 (put) のあと、このメソッドを呼び出してチャネル書き込み操作 (相対「get」) の準備を行います。例を示します。
buf.put(magic); // Prepend header in.read(buf); // Read data into rest of buffer buf.flip(); // Flip buffer out.write(buf); // Write header + data to channel
ある場所から別の場所にデータを転送する際、このメソッドを compact
メソッドと組み合わせて使用することがあります。
public final Buffer rewind()
このメソッドは、リミットを正しく設定したあと、チャネル書き込み操作 (get) の前に呼び出します。例を示します。
out.write(buf); // Write remaining data buf.rewind(); // Rewind buffer buf.get(array); // Copy data into array
public final int remaining()
public final boolean hasRemaining()
public abstract boolean isReadOnly()
public abstract boolean hasArray()
このメソッドの戻り値が true であれば、array
メソッドおよび arrayOffset
メソッドを安全に呼び出すことができます。
public abstract Object array()
このメソッドは、配列を利用するバッファーをネイティブコードにより効率よく渡すために使用します。具象サブクラスは、このメソッドの戻り値として、より強く型付けされた値を返します。
現在のバッファーのコンテンツに変更を加えると、返される配列のコンテンツも変更されます。その逆も同様です。
このメソッドを呼び出す前に hasArray
メソッドを呼び出し、現在のバッファーがアクセス可能な補助配列を持っていることを確認します。
ReadOnlyBufferException
- 現在のバッファーが配列に連動しており、しかも読み込み専用である場合
UnsupportedOperationException
- 現在のバッファーがアクセス可能な配列を利用しない場合public abstract int arrayOffset()
現在のバッファーが配列に連動していれば、その位置 p が配列のインデックス p + arrayOffset() と一致します。
このメソッドを呼び出す前に hasArray
メソッドを呼び出し、現在のバッファーがアクセス可能な補助配列を持っていることを確認します。
ReadOnlyBufferException
- 現在のバッファーが配列に連動しており、しかも読み込み専用である場合
UnsupportedOperationException
- 現在のバッファーがアクセス可能な配列を利用しない場合public abstract boolean isDirect()
|
JavaTM Platform Standard Ed. 6 |
|||||||||
前のクラス 次のクラス | フレームあり フレームなし | |||||||||
概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |
Copyright 2009 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms. Documentation Redistribution Policy も参照してください。