インタフェースBufWriter


public sealed interface BufWriter
AttributeMapperの高度なclassファイル書込みサポート。 様々な数値型(e.g., u2, u4)をバッファの最後に書き込むことや、定数プール・エントリを作成するなど、classファイルの部分を拡張可能なバッファに書き込むことをサポートします。

classファイル形式のすべての数値は、「ビッグ・エンディアン」です。 大きい数値を小さい数値に書き出すと、常に切り捨てられ、最下位バイトが保持され、その他のバイトはサイレントに削除されます。 その結果、数値書込みメソッドは符号付き値と符号なし値の両方を書き込むことができ、最上位バイトのサイレント・ドロップが意図した動作ではない場合、ユーザーは書込み前に値を検証する必要があります。

導入されたバージョン:
24
関連項目:
  • メソッドのサマリー

    修飾子と型
    メソッド
    説明
    boolean
    指定された定数プールが、このバッファの定数プールと索引互換性があるかどうかを返します。
    このバッファに関連付けられた定数プール・ビルダーを返します。
    void
    patchInt(int offset, int size, int value)
    以前に書き込まれた整数値にパッチを適用します。
    void
    reserveSpace(int freeBytes)
    バッファの末尾にfreeBytesバイト以上の空き領域があることを確認します。
    int
    バッファに書き込まれたバイト数を返します。
    void
    writeBytes(byte[] arr)
    バイト配列の内容をバッファに書き込みます。
    void
    writeBytes(byte[] arr, int start, int length)
    バイト配列の範囲をバッファに書き込みます。
    void
    writeDouble(double x)
    8バイトのdouble値をバッファに書き込みます。
    void
    writeFloat(float x)
    4バイトの浮動小数点値をバッファに書き込みます。
    void
    指定された定数プール・エントリのインデックスをu2として書き込みます。
    void
    指定された定数プール・エントリの索引、または指定されたエントリがnullの場合は値0u2として書き込みます。
    void
    writeInt(int x)
    バッファに4バイト(int)を書き込みます。
    void
    writeIntBytes(int intSize, long intValue)
    マルチバイト値をバッファに書き込みます。
    void
    writeLong(long x)
    バッファに8バイト(long)を書き込みます。
    void
    writeU1(int x)
    バッファにバイトを書き込みます。
    void
    writeU2(int x)
    バッファに2バイト(短い)を書き込みます。
  • メソッドの詳細

    • constantPool

      ConstantPoolBuilder constantPool()
      このバッファに関連付けられた定数プール・ビルダーを返します。
      戻り値:
      このバッファに関連付けられた定数プール・ビルダー
      関連項目:
    • canWriteDirect

      boolean canWriteDirect(ConstantPool other)
      指定された定数プールが、このバッファの定数プールと索引互換性があるかどうかを返します。

      これはconstantPool().canWriteDirect(other)のショートカットです。

      パラメータ:
      other - その他の定数プール
      戻り値:
      指定された定数プールがこのバッファの定数プールとインデックス互換性があるかどうか
      関連項目:
    • reserveSpace

      void reserveSpace(int freeBytes)
      バッファの末尾にfreeBytesバイト以上の空き領域があることを確認します。

      このメソッドをコールせずに書込み結果は同じですが、書込みプロセスが遅くなる可能性があります。

      APIのノート:
      これは、バッファの可視状態を変更しないヒントです。一度に十分な領域を割り当てることによって、基礎となる記憶域の再割当てを減らすのに役立ちます。
      パラメータ:
      freeBytes - 予約するバイト数
    • writeU1

      void writeU1(int x)
      バイトをバッファに書き込みます。xはバイトに切り捨てられ、書き込まれます。
      パラメータ:
      x - バイトに切り捨てる値
    • writeU2

      void writeU2(int x)
      2バイト(短い)をバッファに書き込みます。xは2バイトに切り捨てられ、書き込まれます。
      パラメータ:
      x - shortに切り捨てる値
    • writeInt

      void writeInt(int x)
      バッファに4バイト(int)を書き込みます。
      パラメータ:
      x - int値
    • writeFloat

      void writeFloat(float x)
      4バイトの浮動小数点値をバッファに書き込みます。

      変換では、floatのすべてのNaN値を1つの「"canonical" NaN値」に縮小できる場合とできない場合があります。

      パラメータ:
      x - float値
    • writeLong

      void writeLong(long x)
      バッファに8バイト(long)を書き込みます。
      パラメータ:
      x - long値
    • writeDouble

      void writeDouble(double x)
      8バイトのdouble値をバッファに書き込みます。

      変換では、doubleのすべてのNaN値を1つの「"canonical" NaN値」に縮小できる場合とできない場合があります。

      パラメータ:
      x - double値
    • writeBytes

      void writeBytes(byte[] arr)
      バイト配列の内容をバッファに書き込みます。
      パラメータ:
      arr - バイト配列
    • writeBytes

      void writeBytes(byte[] arr, int start, int length)
      バイト配列の範囲をバッファに書き込みます。
      パラメータ:
      arr - バイト配列
      start - バイト配列内の範囲の開始オフセット
      length - 範囲の長さ
      スロー:
      IndexOutOfBoundsException - 範囲が配列範囲外の場合
    • patchInt

      void patchInt(int offset, int size, int value)
      以前に書き込まれた整数値にパッチを適用します。valueは、指定されたsizeバイト数に切り捨てられ、指定された offsetに書き込まれます。 このバッファの最後は変更されません。
      APIのノート:
      offsetは、前の整数値を記述する前にsize()をコールすることで取得できます。
      パラメータ:
      offset - パッチを適用するこのバッファ内のオフセット
      size - 書き込まれる整数のサイズ(バイト単位)
      value - 切り捨てられる整数値
      スロー:
      IndexOutOfBoundsException - パッチ適用されたintが範囲外の場合
      関連項目:
    • writeIntBytes

      void writeIntBytes(int intSize, long intValue)
      マルチバイト値をバッファに書き込みます。intValueは、指定されたintSizeバイト数に切り捨てられ、書き込まれます。
      パラメータ:
      intSize - 書き込まれる整数のサイズ(バイト単位)
      intValue - 切り捨てられる値
    • writeIndex

      void writeIndex(PoolEntry entry)
      指定された定数プール・エントリのインデックスをu2として書き込みます。 entryがこのバッファの「定数プール」に属していない場合、convertedになり、変換されたプール・エントリの索引がかわりに書き込まれます。
      パラメータ:
      entry - 定数プール・エントリ
      スロー:
      IllegalArgumentException - エントリに無効なインデックスがある場合
    • writeIndexOrZero

      void writeIndexOrZero(PoolEntry entry)
      指定された定数プール・エントリの索引、または指定されたエントリがnullの場合は値0u2として書き込みます。 entryがこのバッファの「定数プール」に属していない場合、convertedになり、変換されたプール・エントリの索引がかわりに書き込まれます。
      パラメータ:
      entry - 定数プール・エントリ(null)
      スロー:
      IllegalArgumentException - エントリがnullではなく、索引が無効な場合
    • size

      int size()
      バッファに書き込まれたバイト数を返します。
      戻り値:
      バッファに書き込まれたバイト数
      関連項目: