|
JavaTM 2 Platform Std. Ed. v1.4.0 |
||||||||||
前のクラス 次のクラス | フレームあり フレームなし | ||||||||||
概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |
java.lang.Object | +--java.nio.Buffer
特定のプリミティブ型データのコンテナです。
バッファは、特定のプリミティブ型要素のリニアで有限のシーケンスです。コンテンツのほかに、容量、リミット、位置という必須プロパティがあります。
「容量」は、そのバッファに含まれる要素数によって決定されます。容量の値は固定で、必ず正の値になります。
「リミット」は、読み込みまたは書き込みを行なってはならない最初の要素のインデックスです。容量以下の正の値になります。
「位置」は、次に読み込みまたは書き込みを行う要素のインデックスです。リミット以下の正の値になります。
非ブール型のプリミティブ型には、このクラスのサブクラスが 1 つずつ割り当てられています。
このクラスのサブクラスは、それぞれ次の 2 つのカテゴリに該当する「get」および「put」を定義します。
「相対」操作。現在位置から 1 個以上の要素の読み込みまたは書き込みを行い、転送された要素の数だけ位置を増加します。要求された転送量がリミットを超える場合、相対「get」は
BufferUnderflowException
、相対「put」はBufferOverflowException
をスローします。どちらの場合も、データは一切転送されません。「絶対」操作。明示的な要素インデックスを使用するため、位置は変化しません。インデックス引数がリミットを超える場合、絶対「get」、絶対「put」ともに
IndexOutOfBoundsException
をスローします。
適切なチャネルの入出力操作を行えば、データの転送 (バッファとのやりとり) は可能です。この操作は、常に現在位置に対して相対的に行われます。
バッファの「マーク」は、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);
メソッドの概要 | |
int |
capacity()
このバッファの容量を返します。 |
Buffer |
clear()
このバッファをクリアします。 |
Buffer |
flip()
このバッファをフリップ (反転) します。 |
boolean |
hasRemaining()
現在位置からリミットまでに何らかの要素が存在するかどうかを判断します。 |
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()
|
JavaTM 2 Platform Std. Ed. v1.4.0 |
||||||||||
前のクラス 次のクラス | フレームあり フレームなし | ||||||||||
概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |
Java、Java 2D、および JDBC は米国ならびにその他の国における米国 Sun Microsystems, Inc. の商標もしくは登録商標です。
Copyright 1993-2002 Sun Microsystems, Inc. 901 San Antonio Road
Palo Alto, California, 94303, U.S.A. All Rights Reserved.