クラスMappedByteBuffer

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

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

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

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

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

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

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

導入されたバージョン:
1.4
  • メソッドのサマリー

    修飾子と型
    メソッド
    説明
    このバッファをクリアします。
    このバッファを圧縮します  (オプションの操作)
    このバッファの内容を共有する新しいbyteバッファを作成します。
    このバッファをフリップ(反転)します。
    このバッファの内容への変更を、マップされたファイルが格納されている記憶装置へ強制的に書き込みます。
    force(int index, int length)
    このバッファ・コンテンツのリージョンに対して行われたすべての変更を、マップされたファイルを含むストレージ・デバイスに強制的に書き込みます。
    final boolean
    このバッファの内容が物理メモリー内にあるかどうかを判断します。
    limit(int newLimit)
    このバッファのリミットを設定します。
    このバッファの内容を物理メモリーにロードします。
    このバッファの現在位置にマークを設定します。
    position(int newPosition)
    このバッファの位置を設定します。
    バッファの位置を以前にマークした位置に戻します。
    このバッファをリワインド(巻き戻し)します。
    このバッファの共有のサブシーケンスを内容とする新しいbyteバッファを作成します。
    slice(int index, int length)
    このバッファの共有のサブシーケンスを内容とする新しいbyteバッファを作成します。

    クラスで宣言されたメソッド 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
    修飾子と型
    メソッド
    説明
    alignedSlice(int unitSize)
    コンテンツが、このバッファのコンテンツの共有および整列されたサブシーケンスである新しいバイト・バッファを作成します。
    final int
    alignmentOffset(int index, int unitSize)
    指定されたインデックスのバイトを指すメモリー・アドレスを返します。指定された単位サイズを変更します。
    static ByteBuffer
    allocate(int capacity)
    新しいbyteバッファを割り当てます。
    static ByteBuffer
    allocateDirect(int capacity)
    新しいダイレクトbyteバッファを割り当てます。
    final byte[]
    このバッファを補助するbyte配列を返します  (オプションの操作)
    final int
    このバッファの補助配列内にある、このバッファの最初の要素のオフセットを返します  (オプションの操作)
    abstract CharBuffer
    charバッファとしてこのbyteバッファのビューを作成します。
    abstract DoubleBuffer
    doubleバッファとしてこのbyteバッファのビューを作成します。
    abstract FloatBuffer
    floatバッファとしてこのbyteバッファのビューを作成します。
    abstract IntBuffer
    intバッファとしてこのbyteバッファのビューを作成します。
    abstract LongBuffer
    longバッファとしてこのbyteバッファのビューを作成します。
    abstract ByteBuffer
    このバッファの内容を共有する新しい読込み専用byteバッファを作成します。
    abstract ShortBuffer
    shortバッファとしてこのbyteバッファのビューを作成します。
    int
    このバッファを別のバッファと比較します。
    boolean
    このバッファが別のオブジェクトと等価であるかどうかを判断します。
    abstract byte
    get()
    相対getメソッドです。
    get(byte[] dst)
    相対一括getメソッドです。
    get(byte[] dst, int offset, int length)
    相対一括getメソッドです。
    abstract byte
    get(int index)
    絶対getメソッドです。
    get(int index, byte[] dst)
    絶対一括getメソッド。
    get(int index, byte[] dst, int offset, int length)
    絶対一括getメソッド。
    abstract char
    char値を読み取る相対getメソッドです。
    abstract char
    getChar(int index)
    char値を読み取る絶対getメソッドです。
    abstract double
    double値を読み取る相対getメソッドです。
    abstract double
    getDouble(int index)
    double値を読み取る絶対getメソッドです。
    abstract float
    float値を読み取る相対getメソッドです。
    abstract float
    getFloat(int index)
    float値を読み取る絶対getメソッドです。
    abstract int
    int値を読み取る相対getメソッドです。
    abstract int
    getInt(int index)
    int値を読み取る絶対getメソッドです。
    abstract long
    long値を読み取る相対getメソッドです。
    abstract long
    getLong(int index)
    long値を読み取る絶対getメソッドです。
    abstract short
    short値を読み取る相対getメソッドです。
    abstract short
    getShort(int index)
    short値を読み取る絶対getメソッドです。
    final boolean
    このバッファがアクセス可能なbyte配列に連動するかどうかを判断します。
    int
    このバッファの現在のハッシュ・コードを返します。
    abstract boolean
    このbyteバッファがダイレクト・バッファであるかどうかを判断します。
    int
    このバッファと指定されたバッファの最初の不一致の相対索引を検索して戻します。
    final ByteOrder
    このバッファのbyte順序を取得します。
    このバッファのbyte順序を変更します。
    abstract ByteBuffer
    put(byte b)
    相対putメソッドです  (オプションの操作)
    put(byte[] src)
    相対一括putメソッドです  (オプションの操作)
    put(byte[] src, int offset, int length)
    相対一括putメソッドです  (オプションの操作)
    abstract ByteBuffer
    put(int index, byte b)
    絶対putメソッドです  (オプションの操作)
    put(int index, byte[] src)
    (optional operation)の絶対一括putメソッド。
    put(int index, byte[] src, int offset, int length)
    (optional operation)の絶対一括putメソッド。
    put(int index, ByteBuffer src, int offset, int length)
    (optional operation)の絶対一括putメソッド。
    相対一括putメソッドです  (オプションの操作)
    abstract ByteBuffer
    putChar(char value)
    char値を書き込む相対putメソッドです  (オプションの操作)
    abstract ByteBuffer
    putChar(int index, char value)
    char値を書き込む絶対putメソッドです  (オプションの操作)
    abstract ByteBuffer
    putDouble(double value)
    double値を書き込む相対putメソッドです  (オプションの操作)
    abstract ByteBuffer
    putDouble(int index, double value)
    double値を書き込む絶対putメソッドです  (オプションの操作)
    abstract ByteBuffer
    putFloat(float value)
    float値を書き込む相対putメソッドです  (オプションの操作)
    abstract ByteBuffer
    putFloat(int index, float value)
    float値を書き込む絶対putメソッドです  (オプションの操作)
    abstract ByteBuffer
    putInt(int value)
    int値を書き込む相対putメソッドです  (オプションの操作)
    abstract ByteBuffer
    putInt(int index, int value)
    int値を書き込む絶対putメソッドです  (オプションの操作)
    abstract ByteBuffer
    putLong(int index, long value)
    long値を書き込む絶対putメソッドです  (オプションの操作)
    abstract ByteBuffer
    putLong(long value)
    long値を書き込む相対putメソッドです  (オプションの操作)
    abstract ByteBuffer
    putShort(int index, short value)
    short値を書き込む絶対putメソッドです  (オプションの操作)
    abstract ByteBuffer
    putShort(short value)
    short値を書き込む相対putメソッドです  (オプションの操作)
    このバッファの状態を要約した文字列を返します。
    static ByteBuffer
    wrap(byte[] array)
    byte配列をバッファにラップします。
    static ByteBuffer
    wrap(byte[] array, int offset, int length)
    byte配列をバッファにラップします。

    クラス Bufferで宣言されたメソッド

    capacity, hasRemaining, isReadOnly, limit, position, remaining
    修飾子と型
    メソッド
    説明
    final int
    このバッファの容量を返します。
    final boolean
    現在位置からリミットまでに要素が1つでも存在するかどうかを判断します。
    abstract boolean
    このバッファが読取り専用であるかどうかを判断します。
    final int
    このバッファのリミットを返します。
    final int
    このバッファの位置を返します。
    final int
    現在位置からリミットまでに存在する要素の数を返します。

    クラスオブジェクトで宣言されたメソッド

    clone, finalize, getClass, notify, notifyAll, wait, wait, wait
    修飾子と型
    メソッド
    説明
    protected Object
    このオブジェクトのコピーを作成して、返します。
    protected void
    削除予定のため非推奨: このAPI要素は、将来のバージョンで削除される可能性があります。
    最終決定は非推奨であり、将来のリリースで削除される可能性があります。
    final Class<?>
    このObjectの実行時クラスを返します。
    final void
    このオブジェクトのモニターで待機中のスレッドを1つ再開します。
    final void
    このオブジェクトのモニターで待機中のすべてのスレッドを再開します。
    final void
    現在のスレッドが目覚めるまで待機します。通常、notifiedまたはinterruptedです。
    final void
    wait(long timeoutMillis)
    現在のスレッドは、通常、notifiedまたはinterruptedであるか、一定のリアルタイムが経過するまで、目覚めるまで待機します。
    final void
    wait(long timeoutMillis, int nanos)
    現在のスレッドは、通常、notifiedまたはinterruptedであるか、一定のリアルタイムが経過するまで、目覚めるまで待機します。
  • メソッドの詳細

    • isLoaded

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

      戻り値trueは、このバッファ内のすべてのデータが物理メモリーに存在し、仮想メモリー・ページ・フォルトやI/O操作を発生させずにアクセスできる可能性が高いことを意味します。 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)
      このバッファの位置を設定します。 新しい位置の値よりもマークの値のほうが大きい場合、マークの定義は破棄されます。
      オーバーライド:
      クラスByteBufferposition
      パラメータ:
      newPosition - 新しい位置の値は、現在のリミット以下の負でない値でなければならない
      戻り値:
      このバッファ
      導入されたバージョン:
      9
    • limit

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

      public final MappedByteBuffer mark()
      このバッファの現在位置にマークを設定します。
      オーバーライド:
      クラスByteBuffermark
      戻り値:
      このバッファ
      導入されたバージョン:
      9
    • reset

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

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

      オーバーライド:
      クラスByteBufferreset
      戻り値:
      このバッファ
      導入されたバージョン:
      9
    • clear

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

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

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

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

      オーバーライド:
      クラスByteBufferclear
      戻り値:
      このバッファ
      導入されたバージョン:
      9
    • 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
      戻り値:
      このバッファ
      導入されたバージョン:
      9
    • rewind

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

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

          out.write(buf);    // Write remaining data
          buf.rewind();      // Rewind buffer
          buf.get(array);    // Copy data into array
      

      オーバーライド:
      クラスByteBufferrewind
      戻り値:
      このバッファ
      導入されたバージョン:
      9
    • slice

      public abstract MappedByteBuffer slice()
      このバッファの共有のサブシーケンスを内容とする新しいbyteバッファを作成します。

      新しいバッファの内容は、このバッファの現在位置から始まります。 このバッファの内容に変更を加えると、その内容が新しいバッファに反映されます。新しいバッファの内容に変更を加えると、その内容がこのバッファに反映されます。2つのバッファの位置、リミット、マークの値はそれぞれ異なります。

      新しいバッファの位置はゼロになり、その容量と制限は、このバッファに残っているバイト数になり、マークは未定義になり、バイト順序はBIG_ENDIANになります。 新しいバッファは、このバッファがダイレクト・バッファである場合にかぎりダイレクト・バッファになります。また、このバッファが読取り専用バッファである場合にかぎり読取り専用バッファになります。

      戻されたバッファでload()を呼び出して物理メモリーにバイトを読み込んだり、返されるバッファでforce()を呼び出してストレージ・デバイスにバイトを書き込むと、返されるバッファが表すこのバッファのサブ範囲(つまり、[position(),limit()))でのみ動作します。

      定義:
      クラスByteBufferslice
      戻り値:
      新しいbyteバッファ
      導入されたバージョン:
      17
      関連項目:
    • slice

      public abstract MappedByteBuffer slice(int index, int length)
      このバッファの共有のサブシーケンスを内容とする新しいbyteバッファを作成します。

      新しいバッファの内容は、このバッファ内のindexの位置から始まり、length要素が含まれます。 このバッファの内容に変更を加えると、その内容が新しいバッファに反映されます。新しいバッファの内容に変更を加えると、その内容がこのバッファに反映されます。2つのバッファの位置、リミット、マークの値はそれぞれ異なります。

      新しいバッファ位置はゼロ、容量とリミットはlength、マークは未定義、バイト順序はBIG_ENDIANになります。 新しいバッファは、このバッファがダイレクト・バッファである場合にかぎりダイレクト・バッファになります。また、このバッファが読取り専用バッファである場合にかぎり読取り専用バッファになります。

      戻されたバッファでload()を呼び出して物理メモリーにバイトを読み込んだり、返されたバッファでforce()を呼び出してストレージ・デバイスにバイトを書き込むと、返されるバッファが表すこのバッファのサブ範囲(つまり、indexおよびlengthは事前条件を満たしていると想定される)でのみ動作します。

      定義:
      クラスByteBufferslice
      パラメータ:
      index - 新しいバッファの内容が開始される、このバッファ内の位置。limit()以外の値である必要があります。
      length - 新規バッファに含まれる要素の数。負以外でlimit() - indexより大きい値である必要があります。
      戻り値:
      新しいバッファ
      導入されたバージョン:
      17
    • duplicate

      public abstract MappedByteBuffer duplicate()
      このバッファの内容を共有する新しいbyteバッファを作成します。

      新しいバッファの内容は、このバッファの内容と同じになります。 このバッファの内容に変更を加えると、その内容が新しいバッファに反映されます。新しいバッファの内容に変更を加えると、その内容がこのバッファに反映されます。2つのバッファの位置、リミット、マークの値はそれぞれ異なります。

      新しいバッファの容量、制限、位置およびマークの値は、このバッファの値と同じになり、バイト順序はBIG_ENDIANになります。 新しいバッファは、このバッファがダイレクト・バッファである場合にかぎりダイレクト・バッファになります。また、このバッファが読取り専用バッファである場合にかぎり読取り専用バッファになります。

      定義:
      クラスByteBufferduplicate
      戻り値:
      新しいbyteバッファ
      導入されたバージョン:
      17
    • compact

      public abstract MappedByteBuffer compact()
      このバッファを圧縮します  (オプションの操作)

      バッファの現在位置からリミットまでの間にbyteが存在する場合、これらをバッファの先頭にコピーします。 つまり、索引p = position()のバイトは索引0にコピーされ、索引p + 1のバイトは索引1にコピーされ、索引limit()のバイトまでコピーされます-1が索引n = limit()にコピーされます-1-p. 最終的にバッファの位置はn+1に設定され、リミットは容量の値と等しくなります。 マークは破棄されます。

      バッファの位置は、ゼロではなく、コピーされるbyte数と等しくなります。したがって、このメソッドを呼び出したあと、すぐに別の相対「put」メソッドを呼び出すことができます。

      このメソッドは、書込みが終了しなかった場合にバッファからのデータの書込みを実行する前に呼び出します。 たとえば、次のループでは、バッファbufを介してチャネル間でバイトをコピーします:

          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
          }
      

      定義:
      クラスByteBuffercompact
      戻り値:
      このバッファ
      スロー:
      ReadOnlyBufferException - このバッファが読込み専用である場合
      導入されたバージョン:
      17