|
JavaTM 2 Platform Standard Ed. 5.0 |
|||||||||
前のクラス 次のクラス | フレームあり フレームなし | |||||||||
概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |
java.lang.Object java.nio.Buffer
public abstract class 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()
現在位置からリミットまでに要素が 1 つでも存在するかどうかを判断します。 |
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
- 新しい位置の値。0 以上かつ現在のリミット以下でなければならない
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 Standard Ed. 5.0 |
|||||||||
前のクラス 次のクラス | フレームあり フレームなし | |||||||||
概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |
Copyright 2004 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms. Documentation Redistribution Policy も参照してください。