モジュール java.base
パッケージ java.util.zip

クラスInflater

java.lang.Object
java.util.zip.Inflater

public class Inflater extends Object
このクラスは、一般的なZLIB圧縮ライブラリを使用して汎用の圧縮解除をサポートします。 ZLIB圧縮ライブラリは、当初PNGグラフィック標準の一部として開発されたもので、特許では保護されていません。 詳細については「パッケージjava.util.zipの説明」の仕様を参照してください。

このクラスは、ZLIB圧縮バイトの順序を変更します。 入力バイト・シーケンスは、setInput()メソッドの1つを介してバイト配列またはバイト・バッファで提供されます。 出力バイト・シーケンスは、deflate()メソッドに渡された出力バイト配列またはバイト・バッファに書き込まれます。

次に、DeflaterおよびInflaterを使用して文字列をいくらか圧縮および圧縮解除するコードを示します。

 try {
     // Encode a String into bytes
     String inputString = "blahblahblah€€";
     byte[] input = inputString.getBytes("UTF-8");

     // Compress the bytes
     byte[] output = new byte[100];
     Deflater compresser = new Deflater();
     compresser.setInput(input);
     compresser.finish();
     int compressedDataLength = compresser.deflate(output);

     // Decompress the bytes
     Inflater decompresser = new Inflater();
     decompresser.setInput(output, 0, compressedDataLength);
     byte[] result = new byte[100];
     int resultLength = decompresser.inflate(result);
     decompresser.end();

     // Decode the bytes into a String
     String outputString = new String(result, 0, resultLength, "UTF-8");
 } catch (java.io.UnsupportedEncodingException ex) {
     // handle
 } catch (java.util.zip.DataFormatException ex) {
     // handle
 }
 

APIのノート:
このInflaterによって使用されるリソースを解放するには、end()メソッドを明示的に呼び出す必要があります。 サブクラスは、サブクラスによって獲得されたリソースのクリーンアップを担当します。 クリーンアップを実行するためにObject.finalize()をオーバーライドするサブクラスは、Cleanerなどの代替クリーンアップ・メカニズムを使用し、オーバーライドするfinalizeメソッドを削除するように変更する必要があります。
導入されたバージョン:
1.1
関連項目:
  • コンストラクタのサマリー

    コンストラクタ
    コンストラクタ
    説明
    新しいデコンプレッサを作成します。
    Inflater(boolean nowrap)
    新しいデコンプレッサを作成します。
  • メソッドのサマリー

    修飾子と型
    メソッド
    説明
    void
    end()
    デコンプレッサを閉じ、圧縮解除された入力をすべて破棄します。
    boolean
    圧縮データ・ストリームの最後に達した場合にtrueを返します。
    int
    圧縮解除データのADLER-32値を返します。
    long
    これまでに入力された、圧縮されたバイトの総数を返します。
    long
    これまでに出力された、圧縮解除されたバイトの総数を返します。
    int
    入力バッファに残っているバイトの総数を返します。
    int
    これまでに入力された、圧縮されたバイトの総数を返します。
    int
    これまでに出力された、圧縮解除されたバイトの総数を返します。
    int
    inflate(byte[] output)
    指定されたバッファにバイトを圧縮解除します。
    int
    inflate(byte[] output, int off, int len)
    指定されたバッファにバイトを圧縮解除します。
    int
    指定されたバッファにバイトを圧縮解除します。
    boolean
    プリセット・ディクショナリが圧縮解除に必要な場合にtrueを返します。
    boolean
    入力バッファにデータが残っていない場合にtrueを返します。
    void
    新しい入力データ・セットが処理できるようにインフレータをリセットします。
    void
    setDictionary(byte[] dictionary)
    プリセット・ディクショナリを指定のバイト配列に設定します。
    void
    setDictionary(byte[] dictionary, int off, int len)
    プリセット・ディクショナリを指定のバイト配列に設定します。
    void
    リセット・ディクショナリを指定されたバッファのバイトに設定します。
    void
    setInput(byte[] input)
    圧縮解除のための入力データを設定します。
    void
    setInput(byte[] input, int off, int len)
    圧縮解除のための入力データを設定します。
    void
    圧縮解除のための入力データを設定します。

    クラス java.lang.Objectで宣言されたメソッド

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • コンストラクタの詳細

    • Inflater

      public Inflater(boolean nowrap)
      新しいデコンプレッサを作成します。 パラメータnowrapがtrueの場合は、ZLIBヘッダーおよびチェックサム・フィールドは使用されません。 これによって、GZIPとPKZIPの両方で使用される圧縮形式との互換性が確保されます。

      ノート: nowrapオプションを使用する場合は、入力として特別な「ダミー」バイトを指定する必要があります。 これは、最適化を行うためにZLIBネイティブ・ライブラリで必要となります。

      パラメータ:
      nowrap - trueの場合はGZIP互換の圧縮をサポート
    • Inflater

      public Inflater()
      新しいデコンプレッサを作成します。
  • メソッドの詳細

    • setInput

      public void setInput(byte[] input, int off, int len)
      圧縮解除のための入力データを設定します。

      needsInput()がtrueを返し、さらに多くの入力データが必要であることを示す場合は常に、setInput()メソッドの1つをコールする必要があります。

      パラメータ:
      input - 入力データ・バイト
      off - 入力データの開始オフセット
      len - 入力データの長さ
      関連項目:
    • setInput

      public void setInput(byte[] input)
      圧縮解除のための入力データを設定します。

      needsInput()がtrueを返し、さらに多くの入力データが必要であることを示す場合は常に、setInput()メソッドの1つをコールする必要があります。

      パラメータ:
      input - 入力データ・バイト
      関連項目:
    • setInput

      public void setInput(ByteBuffer input)
      圧縮解除のための入力データを設定します。

      needsInput()がtrueを返し、さらに多くの入力データが必要であることを示す場合は常に、setInput()メソッドの1つをコールする必要があります。

      指定されたバッファ位置は、バッファ制限まで、処理中の操作が実行されると拡張されます。 入力バッファは、あらゆる操作間で(再請求済)を変更できます。変更することは、新規バッファを作成してこのメソッドで設定することと同じです。

      入出力操作と同時に入力バッファの内容、位置または制限を変更すると、予期しない操作結果や操作失敗などの未定義の動作が発生します。

      パラメータ:
      input - 入力データ・バイト
      導入されたバージョン:
      11
      関連項目:
    • setDictionary

      public void setDictionary(byte[] dictionary, int off, int len)
      プリセット・ディクショナリを指定のバイト配列に設定します。 inflate()が0を返す場合、またはneedsDictionary()がプリセット・ディクショナリを必要とすることを示すtrueを返す場合は、このメソッドを呼び出す必要があります。 getAdler()メソッドを使用して必要なディクショナリのAdler-32値を取得できます。
      パラメータ:
      dictionary - ディクショナリ・データ・バイト
      off - データの開始オフセット
      len - データの長さ
      関連項目:
    • setDictionary

      public void setDictionary(byte[] dictionary)
      プリセット・ディクショナリを指定のバイト配列に設定します。 inflate()が0を返す場合、またはneedsDictionary()がプリセット・ディクショナリを必要とすることを示すtrueを返す場合は、このメソッドを呼び出す必要があります。 getAdler()メソッドを使用して必要なディクショナリのAdler-32値を取得できます。
      パラメータ:
      dictionary - ディクショナリ・データ・バイト
      関連項目:
    • setDictionary

      public void setDictionary(ByteBuffer dictionary)
      リセット・ディクショナリを指定されたバッファのバイトに設定します。 inflate()が0を返す場合、またはneedsDictionary()がプリセット・ディクショナリを必要とすることを示すtrueを返す場合は、このメソッドを呼び出す必要があります。 getAdler()メソッドを使用して必要なディクショナリのAdler-32値を取得できます。

      指定されたbyteバッファのバイトは、このメソッドによって完全に消費されます。 戻ったとき、その位置は制限と等しくなります。

      パラメータ:
      dictionary - ディクショナリ・データ・バイト
      導入されたバージョン:
      11
      関連項目:
    • getRemaining

      public int getRemaining()
      入力バッファに残っているバイトの総数を返します。 このメソッドは、圧縮解除が終了したあとに入力バッファに何バイト残っているかを調べるのに使用できます。
      戻り値:
      入力バッファに残っているバイトの総数
    • needsInput

      public boolean needsInput()
      入力バッファにデータが残っていない場合にtrueを返します。 これを使用して、より多くの入力を提供するために、setInput()メソッドの1つをコールする必要があるかどうかを判断できます。
      戻り値:
      入力バッファにデータが残っていない場合はtrue
    • needsDictionary

      public boolean needsDictionary()
      プリセット・ディクショナリが圧縮解除に必要な場合にtrueを返します。
      戻り値:
      プリセット・ディクショナリが圧縮解除に必要な場合はtrue
      関連項目:
    • finished

      public boolean finished()
      圧縮データ・ストリームの最後に達した場合にtrueを返します。
      戻り値:
      圧縮データ・ストリームの最後に達した場合はtrue
    • inflate

      public int inflate(byte[] output, int off, int len) throws DataFormatException
      指定されたバッファにバイトを圧縮解除します。 実際に圧縮解除されたバイト数を返します。 戻り値0は、入力データやプリセット・ライブラリがさらに必要かどうかを判断するためにneedsInput()またはneedsDictionary()を呼び出す必要があることを示します。 後者の場合、getAdler()を使用して、要求されるディクショナリのAdler-32値を取得できます。

      setInput(ByteBuffer)メソッドがコールされ、入力にバッファが提供された場合、DataFormatExceptionがスローされた場合でも、この操作で使用されるバイト数が入力バッファ位置の拡張されます。

      「残りのバイト数」は、使用される入力バイト数だけ削減されます。 setInput(ByteBuffer)メソッドがコールされて入力用のバッファが指定された場合、入力バッファ位置は使用バイト数に進みます。

      これらのバイトの合計と「読み取られた合計バイト数」および「書き込まれた合計バイト数」の値は、例外が発生する前に消費されて生成されたデータの量を反映するためにDataFormatExceptionがスローされた場合でも更新されます。

      パラメータ:
      output - 未圧縮データ用のバッファ
      off - データの開始オフセット
      len - 圧縮解除される最大バイト数
      戻り値:
      圧縮解除される実効バイト数
      例外:
      DataFormatException - 圧縮データ形式が無効な場合
      関連項目:
    • inflate

      public int inflate(byte[] output) throws DataFormatException
      指定されたバッファにバイトを圧縮解除します。 実際に圧縮解除されたバイト数を返します。 戻り値0は、入力データやプリセット・ライブラリがさらに必要かどうかを判断するためにneedsInput()またはneedsDictionary()を呼び出す必要があることを示します。 後者の場合、getAdler()を使用して、要求されるディクショナリのAdler-32値を取得できます。

      「残りのバイト数」は、使用される入力バイト数だけ削減されます。 setInput(ByteBuffer)メソッドがコールされて入力用のバッファが指定された場合、入力バッファ位置は使用バイト数に進みます。

      これらのバイトの合計と「読み取られた合計バイト数」および「書き込まれた合計バイト数」の値は、例外が発生する前に消費されて生成されたデータの量を反映するためにDataFormatExceptionがスローされた場合でも更新されます。

      パラメータ:
      output - 未圧縮データ用のバッファ
      戻り値:
      圧縮解除される実効バイト数
      例外:
      DataFormatException - 圧縮データ形式が無効な場合
      関連項目:
    • inflate

      public int inflate(ByteBuffer output) throws DataFormatException
      指定されたバッファにバイトを圧縮解除します。 実際に圧縮解除されたバイト数を返します。 戻り値0は、入力データやプリセット・ライブラリがさらに必要かどうかを判断するためにneedsInput()またはneedsDictionary()を呼び出す必要があることを示します。 後者の場合、getAdler()を使用して、要求されるディクショナリのAdler-32値を取得できます。

      成功すると、指定されたoutputバイト・バッファの位置が操作によって生成されたバイト数だけ拡大されます。これは、このメソッドによって返された数と同じです。 DataFormatExceptionがスローされた場合でも、outputバッファの位置は拡張されます。

      「残りのバイト数」は、使用される入力バイト数だけ削減されます。 setInput(ByteBuffer)メソッドがコールされて入力用のバッファが指定された場合、入力バッファ位置は使用バイト数に進みます。

      これらのバイトの合計と「読み取られた合計バイト数」および「書き込まれた合計バイト数」の値は、例外が発生する前に消費されて生成されたデータの量を反映するためにDataFormatExceptionがスローされた場合でも更新されます。

      パラメータ:
      output - 未圧縮データ用のバッファ
      戻り値:
      圧縮解除される実効バイト数
      例外:
      DataFormatException - 圧縮データ形式が無効な場合
      ReadOnlyBufferException - 指定された出力バッファが読取り専用の場合
      導入されたバージョン:
      11
      関連項目:
    • getAdler

      public int getAdler()
      圧縮解除データのADLER-32値を返します。
      戻り値:
      圧縮解除データのADLER-32値
    • getTotalIn

      public int getTotalIn()
      これまでに入力された、圧縮されたバイトの総数を返します。

      バイト数はInteger.MAX_VALUEよりも大きくなる場合があるため、この情報を得る場合はgetBytesRead()メソッドの方を優先的に使用してください。

      戻り値:
      これまでに入力された、圧縮されたバイトの総数
    • getBytesRead

      public long getBytesRead()
      これまでに入力された、圧縮されたバイトの総数を返します。
      戻り値:
      これまでに入力された、圧縮されたバイトの総数(負ではない値)
      導入されたバージョン:
      1.5
    • getTotalOut

      public int getTotalOut()
      これまでに出力された、圧縮解除されたバイトの総数を返します。

      バイト数はInteger.MAX_VALUEよりも大きくなる場合があるため、この情報を得る場合はgetBytesWritten()メソッドの方を優先的に使用してください。

      戻り値:
      これまでに出力された、圧縮解除されたバイトの総数
    • getBytesWritten

      public long getBytesWritten()
      これまでに出力された、圧縮解除されたバイトの総数を返します。
      戻り値:
      これまでに出力された、圧縮解除されたバイトの総数(負ではない値)
      導入されたバージョン:
      1.5
    • reset

      public void reset()
      新しい入力データ・セットが処理できるようにインフレータをリセットします。
    • end

      public void end()
      デコンプレッサを閉じ、圧縮解除された入力をすべて破棄します。 このメソッドは、デコンプレッサが使用されなくなったときに呼び出される必要があります。 このメソッドが呼び出されたあとのInflaterオブジェクトの動作は保証されません。