- java.lang.Object
-
- java.nio.Buffer
-
- java.nio.ByteBuffer
-
- java.nio.MappedByteBuffer
-
- すべての実装されたインタフェース:
Comparable<ByteBuffer>
public abstract class MappedByteBuffer extends ByteBuffer
ファイルのメモリー・マップ領域を内容とするダイレクトbyteバッファです。マップされたbyteバッファは、
FileChannel.map
メソッドで作成されます。 このクラスは、メモリー・マップされたファイル領域に特有の操作を使用してByteBuffer
クラスを拡張します。マップされたbyteバッファと、これによって表されるファイル・マッピングは、バッファ自体がガベージ・コレクトされるまで有効です。
たとえば、何らかのプログラムによって、マップされたファイルの対応する領域の内容が変更されれば、マップされたbyteバッファの内容も変更されます。 こうした変更が発生するかどうか、またどのタイミングで発生するかは、オペレーティング・システムによって異なるため、未指定です。
マップされたbyteバッファ全体またはその一部にアクセスできなくなることがあります。たとえば、マップされたファイルの切詰めが行われると、このような事態が発生します。 マップされたbyteバッファのアクセス不可な領域にアクセスしようとしても、バッファの内容は変更されませんが、アクセスしたときまたはそのあとで未指定の例外がスローされます。 事前に適切な予防措置をとり、このプログラムや並行して実行されているプログラムから、マップされたファイルに対して読み込みと書込み以外の操作を実行できないようにすることを強くお薦めします。
それ以外の点では、マップされたbyteバッファは通常のダイレクトbyteバッファと同じように動作します。
- 導入されたバージョン:
- 1.4
-
-
メソッドのサマリー
すべてのメソッド インスタンス・メソッド 具象メソッド 修飾子と型 メソッド 説明 MappedByteBuffer
clear()
このバッファをクリアします。MappedByteBuffer
flip()
このバッファをフリップ(反転)します。MappedByteBuffer
force()
このバッファの内容への変更を、マップされたファイルが格納されている記憶装置へ強制的に書き込みます。boolean
isLoaded()
このバッファの内容が物理メモリー内にあるかどうかを判断します。MappedByteBuffer
limit(int newLimit)
このバッファのリミットを設定します。MappedByteBuffer
load()
このバッファの内容を物理メモリーにロードします。MappedByteBuffer
mark()
このバッファの現在位置にマークを設定します。MappedByteBuffer
position(int newPosition)
このバッファの位置を設定します。MappedByteBuffer
reset()
バッファの位置を以前にマークした位置に戻します。MappedByteBuffer
rewind()
このバッファをリワインド(巻き戻し)します。-
クラス java.nio.Bufferから継承されるメソッド
capacity, hasRemaining, isReadOnly, limit, position, remaining
-
クラス java.nio.ByteBufferから継承されるメソッド
alignedSlice, alignmentOffset, allocate, allocateDirect, array, arrayOffset, asCharBuffer, asDoubleBuffer, asFloatBuffer, asIntBuffer, asLongBuffer, asReadOnlyBuffer, asShortBuffer, compact, compareTo, duplicate, equals, get, get, get, get, getChar, getChar, getDouble, getDouble, getFloat, getFloat, getInt, getInt, getLong, getLong, getShort, getShort, hasArray, hashCode, isDirect, order, order, put, put, put, put, put, putChar, putChar, putDouble, putDouble, putFloat, putFloat, putInt, putInt, putLong, putLong, putShort, putShort, slice, toString, wrap, wrap
-
-
-
-
メソッドの詳細
-
isLoaded
public final boolean isLoaded()
このバッファの内容が物理メモリー内にあるかどうかを判断します。戻り値が
true
の場合は、このバッファ内のすべてのデータが物理メモリーに格納されている可能性が高くなります。この場合、データにアクセスしたときに、仮想メモリーのページ違反や入出力操作は発生しません。 ただし、戻り値がfalse
の場合でも、バッファの内容が物理メモリーに格納されていることがあります。戻り値は絶対的なものではなく、単なる手がかりです。なぜなら、このメソッド呼出しが値を返すまでの間に、基礎にあるオペレーティング・システムによってバッファのデータの一部がページ・アウトされている可能性があるからです。
- 戻り値:
- 現在のバッファの内容が物理メモリーに格納されている可能性がある場合
true
-
load
public final MappedByteBuffer load()
このバッファの内容を物理メモリーにロードします。このメソッドは、値を返すときに、現在のバッファの内容を物理メモリー内にできるだけ格納しようとします。 このメソッドを呼び出すと、ページ違反や入出力操作が発生する可能性があります。
- 戻り値:
- このバッファ
-
force
public final MappedByteBuffer force()
このバッファの内容への変更を、マップされたファイルが格納されている記憶装置へ強制的に書き込みます。このバッファにマップされるファイルがローカルの記憶装置に格納されている場合は、ファイルを作成してからまたはこのメソッドを最後に呼び出してから行ったすべての変更が、値を返すときにこの記憶装置に強制的に書き込まれます。
一方、ファイルがローカルの記憶装置上にない場合、書込みは行われません。
このバッファが読み込み/書込みモード(
FileChannel.MapMode.READ_WRITE
)でマップされていなかった場合は、このメソッドを呼び出しても何も起こりません。- 戻り値:
- このバッファ
-
position
public final MappedByteBuffer position(int newPosition)
このバッファの位置を設定します。 新しい位置の値よりもマークの値のほうが大きい場合、マークの定義は破棄されます。- オーバーライド:
- クラス
ByteBuffer
のposition
- パラメータ:
newPosition
- 新しい位置の値は、現在のリミット以下の負でない値でなければならない- 戻り値:
- このバッファ
-
limit
public final MappedByteBuffer limit(int newLimit)
このバッファのリミットを設定します。 位置の値が新しいリミットより大きい場合、リミットと同じ値に変更されます。 マークの値が新しいリミットより大きい場合、マークの定義は破棄されます。- オーバーライド:
- クラス
ByteBuffer
のlimit
- パラメータ:
newLimit
- 新しいリミット値は、このバッファの容量以下の負でない値でなければならない- 戻り値:
- このバッファ
-
mark
public final MappedByteBuffer mark()
このバッファの現在位置にマークを設定します。- オーバーライド:
- クラス
ByteBuffer
のmark
- 戻り値:
- このバッファ
-
reset
public final MappedByteBuffer reset()
バッファの位置を以前にマークした位置に戻します。このメソッドを呼び出しても、マークの値は変更されません。マークが破棄されることもありません。
- オーバーライド:
- クラス
ByteBuffer
のreset
- 戻り値:
- このバッファ
-
clear
public final MappedByteBuffer clear()
このバッファをクリアします。 バッファの位置はゼロ、リミットは容量の値に設定されます。マークは破棄されます。一連のチャネル読込み操作またはput操作を使用してこのバッファにデータを格納する前に、このメソッドを呼び出します。 次に例を示します。
buf.clear(); // Prepare buffer for reading in.read(buf); // Read data
このメソッドはバッファ内のデータを実際に消去するわけではありません。しかし、そうした状況で使用されるため、クリアと命名されています。
- オーバーライド:
- クラス
ByteBuffer
のclear
- 戻り値:
- このバッファ
-
flip
public final MappedByteBuffer 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
メソッドと組み合わせて使用することがあります。- オーバーライド:
- クラス
ByteBuffer
のflip
- 戻り値:
- このバッファ
-
rewind
public final MappedByteBuffer rewind()
このバッファをリワインド(巻き戻し)します。 位置はゼロに設定され、マークは破棄されます。このメソッドは、リミットを正しく設定したあと、一連のチャネル書込み操作(get)の前に呼び出します。 次に例を示します。
out.write(buf); // Write remaining data buf.rewind(); // Rewind buffer buf.get(array); // Copy data into array
- オーバーライド:
- クラス
ByteBuffer
のrewind
- 戻り値:
- このバッファ
-
-