モジュール 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)でマップされていなかった場合は、このメソッドを呼び出しても何も起こりません。

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

        public final MappedByteBuffer position​(int newPosition)
        このバッファの位置を設定します。 新しい位置の値よりもマークの値のほうが大きい場合、マークの定義は破棄されます。
        オーバーライド:
        クラスByteBufferposition
        パラメータ:
        newPosition - 新しい位置の値は、現在のリミット以下の負でない値でなければならない
        戻り値:
        このバッファ
      • limit

        public final MappedByteBuffer limit​(int newLimit)
        このバッファのリミットを設定します。 位置の値が新しいリミットより大きい場合、リミットと同じ値に変更されます。 マークの値が新しいリミットより大きい場合、マークの定義は破棄されます。
        オーバーライド:
        クラスByteBufferlimit
        パラメータ:
        newLimit - 新しいリミット値は、このバッファの容量以下の負でない値でなければならない
        戻り値:
        このバッファ
      • mark

        public final MappedByteBuffer mark​()
        このバッファの現在位置にマークを設定します。
        オーバーライド:
        クラスByteBuffermark
        戻り値:
        このバッファ
      • reset

        public final MappedByteBuffer reset​()
        バッファの位置を以前にマークした位置に戻します。

        このメソッドを呼び出しても、マークの値は変更されません。マークが破棄されることもありません。

        オーバーライド:
        クラスByteBufferreset
        戻り値:
        このバッファ
      • clear

        public final MappedByteBuffer clear​()
        このバッファをクリアします。 バッファの位置はゼロ、リミットは容量の値に設定されます。マークは破棄されます。

        一連のチャネル読込み操作またはput操作を使用してこのバッファにデータを格納する前に、このメソッドを呼び出します。 次に例を示します。

         buf.clear();     // Prepare buffer for reading
         in.read(buf);    // Read data

        このメソッドはバッファ内のデータを実際に消去するわけではありません。しかし、そうした状況で使用されるため、クリアと命名されています。

        オーバーライド:
        クラスByteBufferclear
        戻り値:
        このバッファ
      • 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メソッドと組み合わせて使用することがあります。

        オーバーライド:
        クラスByteBufferflip
        戻り値:
        このバッファ
      • rewind

        public final MappedByteBuffer rewind​()
        このバッファをリワインド(巻き戻し)します。 位置はゼロに設定され、マークは破棄されます。

        このメソッドは、リミットを正しく設定したあと、一連のチャネル書込み操作(get)の前に呼び出します。 次に例を示します。

         out.write(buf);    // Write remaining data
         buf.rewind();      // Rewind buffer
         buf.get(array);    // Copy data into array
        オーバーライド:
        クラスByteBufferrewind
        戻り値:
        このバッファ