モジュール java.base
パッケージ java.nio

クラスMappedByteBuffer

  • すべての実装されたインタフェース:
    Comparable<ByteBuffer>

    public abstract class MappedByteBuffer
    extends ByteBuffer
    ファイルのメモリー・マップ領域を内容とするダイレクトbyteバッファです。

    マップされたbyteバッファは、FileChannel.mapメソッドで作成されます。 このクラスは、メモリー・マップされたファイル領域に特有の操作を使用してByteBufferクラスを拡張します。

    マップされたbyteバッファと、これによって表されるファイル・マッピングは、バッファ自体がガベージ・コレクトされるまで有効です。

    たとえば、何らかのプログラムによって、マップされたファイルの対応する領域の内容が変更されれば、マップされたbyteバッファの内容も変更されます。 こうした変更が発生するかどうか、またどのタイミングで発生するかは、オペレーティング・システムによって異なるため、未指定です。

    マップされたbyteバッファ全体またはその一部にアクセスできなくなることがあります。たとえば、マップされたファイルの切詰めが行われると、このような事態が発生します。 マップされたbyteバッファのアクセス不可な領域にアクセスしようとしても、バッファの内容は変更されませんが、アクセスしたときまたはそのあとで未指定の例外がスローされます。 事前に適切な予防措置をとり、このプログラムや並行して実行されているプログラムから、マップされたファイルに対して読み込みと書込み以外の操作を実行できないようにすることを強くお薦めします。

    それ以外の点では、マップされたbyteバッファは通常のダイレクトbyteバッファと同じように動作します。

    導入されたバージョン:
    1.4
    • メソッドの詳細

      • isLoaded

        public final boolean isLoaded()
        このバッファの内容が物理メモリー内にあるかどうかを判断します。

        戻り値がtrueの場合は、このバッファ内のすべてのデータが物理メモリーに格納されている可能性が高くなります。この場合、データにアクセスしたときに、仮想メモリーのページ違反や入出力操作は発生しません。 ただし、戻り値がfalseの場合でも、バッファの内容が物理メモリーに格納されていることがあります。

        戻り値は絶対的なものではなく、単なる手がかりです。なぜなら、このメソッド呼出しが値を返すまでの間に、基礎にあるオペレーティング・システムによってバッファのデータの一部がページ・アウトされている可能性があるからです。

        戻り値:
        現在のバッファの内容が物理メモリーに格納されている可能性がある場合true
      • load

        public final MappedByteBuffer load()
        このバッファの内容を物理メモリーにロードします。

        このメソッドは、値を返すときに、現在のバッファの内容を物理メモリー内にできるだけ格納しようとします。 このメソッドを呼び出すと、ページ違反や入出力操作が発生する可能性があります。

        戻り値:
        このバッファ
      • force

        public final MappedByteBuffer force()
        このバッファの内容への変更を、マップされたファイルが格納されている記憶装置へ強制的に書き込みます。

        このバッファにマップされるファイルがローカルの記憶装置に格納されている場合は、ファイルを作成してからまたはこのメソッドを最後に呼び出してから行ったすべての変更が、値を返すときにこの記憶装置に強制的に書き込まれます。

        一方、ファイルがローカルの記憶装置上にない場合、書込みは行われません。

        このバッファが読み込み/書込みモード(FileChannel.MapMode.READ_WRITE)でマップされていなかった場合は、このメソッドを呼び出しても何も起こりません。

        戻り値:
        このバッファ