- すべての実装されたインタフェース:
Comparable<ByteBuffer>
マップされたbyteバッファは、FileChannel.map
メソッドで作成されます。 このクラスは、メモリー・マップされたファイル領域に特有の操作を使用してByteBuffer
クラスを拡張します。
マップされたbyteバッファと、これによって表されるファイル・マッピングは、バッファ自体がガベージ・コレクトされるまで有効です。
たとえば、何らかのプログラムによって、マップされたファイルの対応する領域の内容が変更されれば、マップされたbyteバッファの内容も変更されます。 こうした変更が発生するかどうか、またどのタイミングで発生するかは、オペレーティング・システムによって異なるため、未指定です。
マップされたbyteバッファ全体またはその一部にアクセスできなくなることがあります。たとえば、マップされたファイルの切詰めが行われると、このような事態が発生します。 マップされたbyteバッファのアクセス不可な領域にアクセスしようとしても、バッファの内容は変更されませんが、アクセスしたときまたはそのあとで未指定の例外がスローされます。 事前に適切な予防措置をとり、このプログラムや並行して実行されているプログラムから、マップされたファイルに対して読み込みと書込み以外の操作を実行できないようにすることを強くお薦めします。
それ以外の点では、マップされたbyteバッファは通常のダイレクトbyteバッファと同じように動作します。
- 導入されたバージョン:
- 1.4
-
メソッドのサマリー
修飾子と型メソッド説明final MappedByteBuffer
clear()
このバッファをクリアします。abstract MappedByteBuffer
compact()
このバッファを圧縮します (オプションの操作)。abstract MappedByteBuffer
このバッファの内容を共有する新しいbyteバッファを作成します。final MappedByteBuffer
flip()
このバッファをフリップ(反転)します。final MappedByteBuffer
force()
このバッファの内容への変更を、マップされたファイルが格納されている記憶装置へ強制的に書き込みます。final MappedByteBuffer
force
(int index, int length) このバッファ・コンテンツのリージョンに対して行われたすべての変更を、マップされたファイルを含むストレージ・デバイスに強制的に書き込みます。final boolean
isLoaded()
このバッファの内容が物理メモリー内にあるかどうかを判断します。final MappedByteBuffer
limit
(int newLimit) このバッファのリミットを設定します。final MappedByteBuffer
load()
このバッファの内容を物理メモリーにロードします。final MappedByteBuffer
mark()
このバッファの現在位置にマークを設定します。final MappedByteBuffer
position
(int newPosition) このバッファの位置を設定します。final MappedByteBuffer
reset()
バッファの位置を以前にマークした位置に戻します。final MappedByteBuffer
rewind()
このバッファをリワインド(巻き戻し)します。abstract MappedByteBuffer
slice()
このバッファの共有のサブシーケンスを内容とする新しいbyteバッファを作成します。abstract MappedByteBuffer
slice
(int index, int length) このバッファの共有のサブシーケンスを内容とする新しいbyteバッファを作成します。クラス java.nio.ByteBufferで宣言されたメソッド
alignedSlice, alignmentOffset, allocate, allocateDirect, array, arrayOffset, asCharBuffer, asDoubleBuffer, asFloatBuffer, asIntBuffer, asLongBuffer, asReadOnlyBuffer, asShortBuffer, compareTo, equals, get, get, get, get, get, get, getChar, getChar, getDouble, getDouble, getFloat, getFloat, getInt, getInt, getLong, getLong, getShort, getShort, hasArray, hashCode, isDirect, mismatch, order, order, put, put, put, put, put, put, put, put, putChar, putChar, putDouble, putDouble, putFloat, putFloat, putInt, putInt, putLong, putLong, putShort, putShort, toString, wrap, wrap
クラス java.nio.Bufferで宣言されたメソッド
capacity, hasRemaining, isReadOnly, limit, position, remaining
-
メソッドの詳細
-
isLoaded
public final boolean isLoaded()このバッファの内容が物理メモリー内にあるかどうかを判断します。戻り値が
true
の場合は、このバッファ内のすべてのデータが物理メモリーに格納されている可能性が高くなります。この場合、データにアクセスしたときに、仮想メモリーのページ違反や入出力操作は発生しません。 ただし、戻り値がfalse
の場合でも、バッファの内容が物理メモリーに格納されていることがあります。戻り値は絶対的なものではなく、単なる手がかりです。なぜなら、このメソッド呼出しが値を返すまでの間に、基礎にあるオペレーティング・システムによってバッファのデータの一部がページ・アウトされている可能性があるからです。
- 戻り値:
- 現在のバッファの内容が物理メモリーに格納されている可能性がある場合
true
-
load
public final MappedByteBuffer load()このバッファの内容を物理メモリーにロードします。このメソッドは、値を返すときに、現在のバッファの内容を物理メモリー内にできるだけ格納しようとします。 このメソッドを呼び出すと、ページ違反や入出力操作が発生する可能性があります。
- 戻り値:
- このバッファ
-
force
public final MappedByteBuffer force()このバッファの内容への変更を、マップされたファイルが格納されている記憶装置へ強制的に書き込みます。 リージョンは、このバッファのインデックス0で始まり、capacity()
バイトです。 このメソッドの起動は、呼出しforce(0,capacity())
とまったく同じように動作します。このバッファにマップされるファイルがローカルの記憶装置に格納されている場合は、ファイルを作成してからまたはこのメソッドを最後に呼び出してから行ったすべての変更が、値を返すときにこの記憶装置に強制的に書き込まれます。
一方、ファイルがローカルの記憶装置上にない場合、書込みは行われません。
このバッファが読取り/書込みモード(
FileChannel.MapMode.READ_WRITE
)にマップされていない場合は、このメソッドを呼び出しても効果がない可能性があります。 特に、このメソッドは、読取り専用またはプライベート・マッピング・モードでマップされたバッファには影響しません。 このメソッドは、実装固有のマッピング・モードに有効である場合も、そうでない場合もあります。- 戻り値:
- このバッファ
- 例外:
UncheckedIOException
- マップされたファイルを含むストレージ・デバイスにバッファ・コンテンツを書き込むI/Oエラーが発生した場合
-
force
public final MappedByteBuffer force(int index, int length) このバッファ・コンテンツのリージョンに対して行われたすべての変更を、マップされたファイルを含むストレージ・デバイスに強制的に書き込みます。 リージョンは、このバッファ内の指定されたindex
から開始され、length
バイトです。このバッファにマップされたファイルがローカル・ストレージ・デバイスに存在する場合、このメソッドが戻ると、リージョン・バッファが作成された後、またはこのメソッドが最後に起動された後に、選択されたリージョン・バッファに対して行われたすべての変更が、そのデバイスに書き込まれていることが保証されます。 強制操作では、指定したリージョンの外にあるバイトを書き込み、たとえば、一部のデバイス固有の粒度のデータ・ブロックが全体に転送されるようにします。
一方、ファイルがローカルの記憶装置上にない場合、書込みは行われません。
このバッファが読取り/書込みモード(
FileChannel.MapMode.READ_WRITE
)にマップされていない場合は、このメソッドを呼び出しても効果がない可能性があります。 特に、このメソッドは、読取り専用またはプライベート・マッピング・モードでマップされたバッファには影響しません。 このメソッドは、実装固有のマッピング・モードに有効である場合も、そうでない場合もあります。- パラメータ:
index
- バッファ・リージョンの最初のバイトの索引で、記憶域に書き戻す必要があります。負以外でcapacity()
未満である必要がありますlength
- リージョンの長さ(バイト単位)。負以外で、capacity() - index
以下にする必要があります- 戻り値:
- このバッファ
- 例外:
IndexOutOfBoundsException
- 索引および長さに対する事前条件が保持されていない場合。UncheckedIOException
- マップされたファイルを含むストレージ・デバイスにバッファ・コンテンツを書き込むI/Oエラーが発生した場合- 導入されたバージョン:
- 13
-
position
public final MappedByteBuffer position(int newPosition) このバッファの位置を設定します。 新しい位置の値よりもマークの値のほうが大きい場合、マークの定義は破棄されます。 -
limit
public final MappedByteBuffer limit(int newLimit) このバッファのリミットを設定します。 位置の値が新しいリミットより大きい場合、リミットと同じ値に変更されます。 マークの値が新しいリミットより大きい場合、マークの定義は破棄されます。 -
mark
public final MappedByteBuffer mark()このバッファの現在位置にマークを設定します。 -
reset
public final MappedByteBuffer reset()バッファの位置を以前にマークした位置に戻します。このメソッドを呼び出しても、マークの値は変更されません。マークが破棄されることもありません。
-
clear
public final MappedByteBuffer clear()このバッファをクリアします。 バッファの位置はゼロ、リミットは容量の値に設定されます。マークは破棄されます。一連のチャネル読込み操作または「put」操作を使用してこのバッファにデータを格納する前に、このメソッドを呼び出します。 たとえば、
buf.clear(); // Prepare buffer for reading in.read(buf); // Read data
このメソッドはバッファ内のデータを実際に消去するわけではありません。しかし、そうした状況で使用されるため、クリアと命名されています。
-
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
メソッドと組み合わせて使用することがあります。 -
rewind
public final MappedByteBuffer rewind()このバッファをリワインド(巻き戻し)します。 位置はゼロに設定され、マークは破棄されます。このメソッドは、リミットを正しく設定したあと、一連のチャネル書込み操作(get)の前に呼び出します。 たとえば、
out.write(buf); // Write remaining data buf.rewind(); // Rewind buffer buf.get(array); // Copy data into array
-
slice
public abstract MappedByteBuffer slice()このバッファの共有のサブシーケンスを内容とする新しいbyteバッファを作成します。新しいバッファの内容は、このバッファの現在位置から始まります。 このバッファの内容に変更を加えると、その内容が新しいバッファに反映されます。新しいバッファの内容に変更を加えると、その内容がこのバッファに反映されます。2つのバッファの位置、リミット、マークの値はそれぞれ異なります。
新しいバッファの位置はゼロになり、その容量とその制限はこのバッファに残っているバイト数になり、そのマークは未定義になり、バイト順は
BIG_ENDIAN
になります。 新しいバッファは、このバッファがダイレクト・バッファである場合にかぎりダイレクト・バッファになります。また、このバッファが読取り専用バッファである場合にかぎり読取り専用バッファになります。戻されたバッファで
load()
を呼び出して物理メモリーにバイトを読み込んだり、返されるバッファでforce()
を呼び出してストレージ・デバイスにバイトを書き込むと、返されるバッファが表すこのバッファのサブ範囲(つまり、[position(),limit())
)でのみ動作します。- 定義:
- クラス
ByteBuffer
のslice
- 戻り値:
- 新しいbyteバッファ
- 関連項目:
-
slice
public abstract MappedByteBuffer slice(int index, int length) このバッファの共有のサブシーケンスを内容とする新しいbyteバッファを作成します。新しいバッファの内容は、このバッファ内の
index
の位置から始まり、length
要素が含まれます。 このバッファの内容に変更を加えると、その内容が新しいバッファに反映されます。新しいバッファの内容に変更を加えると、その内容がこのバッファに反映されます。2つのバッファの位置、リミット、マークの値はそれぞれ異なります。新しいバッファ位置はゼロ、容量とリミットは
length
、マークは未定義、バイト順序はBIG_ENDIAN
になります。 新しいバッファは、このバッファがダイレクト・バッファである場合にかぎりダイレクト・バッファになります。また、このバッファが読取り専用バッファである場合にかぎり読取り専用バッファになります。戻されたバッファで
load()
を呼び出して物理メモリーにバイトを読み込んだり、返されたバッファでforce()
を呼び出してストレージ・デバイスにバイトを書き込むと、返されるバッファが表すこのバッファのサブ範囲(つまり、index
およびlength
は事前条件を満たしていると想定される)でのみ動作します。- 定義:
- クラス
ByteBuffer
のslice
- パラメータ:
index
- 新しいバッファの内容が開始される、このバッファ内の位置。limit()
以外の値である必要があります。length
- 新規バッファに含まれる要素の数。負以外でlimit() - index
より大きい値である必要があります。- 戻り値:
- 新しいバッファ
-
duplicate
public abstract MappedByteBuffer duplicate()このバッファの内容を共有する新しいbyteバッファを作成します。新しいバッファの内容は、このバッファの内容と同じになります。 このバッファの内容に変更を加えると、その内容が新しいバッファに反映されます。新しいバッファの内容に変更を加えると、その内容がこのバッファに反映されます。2つのバッファの位置、リミット、マークの値はそれぞれ異なります。
新しいバッファの容量、限界、位置、およびマークの値は、このバッファのものと同じになり、バイト・オーダーは
BIG_ENDIAN
になります。 新しいバッファは、このバッファがダイレクト・バッファである場合にかぎりダイレクト・バッファになります。また、このバッファが読取り専用バッファである場合にかぎり読取り専用バッファになります。- 定義:
- クラス
ByteBuffer
のduplicate
- 戻り値:
- 新しいbyteバッファ
-
compact
public abstract MappedByteBuffer compact()このバッファを圧縮します (オプションの操作)。バッファの現在位置からリミットまでの間にbyteが存在する場合、これらをバッファの先頭にコピーします。 つまり、インデックス位置p =
position()
のbyteがインデックス・ゼロにコピーされ、インデックス位置p + 1のbyteがインデックス1にコピーされるということです。インデックス位置limit()
- 1のbyteがインデックスn =limit()
-1
- pにコピーされるまで、同様の処理が繰り返されます。 最終的にバッファの位置はn+1に設定され、リミットは容量の値と等しくなります。 マークは破棄されます。バッファの位置は、ゼロではなく、コピーされるbyte数と等しくなります。したがって、このメソッドを呼び出したあと、すぐに別の相対「put」メソッドを呼び出すことができます。
このメソッドは、書込みが終了しなかった場合にバッファからのデータの書込みを実行する前に呼び出します。 次のループは、バッファ
buf
を使って、あるチャネルから別のチャネルにbyteをコピーします。buf.clear(); // Prepare buffer for use while (in.read(buf) >= 0 || buf.position != 0) { buf.flip(); out.write(buf); buf.compact(); // In case of partial write }
- 定義:
- クラス
ByteBuffer
のcompact
- 戻り値:
- このバッファ
-