モジュール java.base
パッケージ 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()メソッドを明示的に呼び出す必要があります。 サブクラスは、サブクラスによって獲得されたリソースのクリーンアップを担当します。 クリーンアップを実行するためにfinalize()をオーバーライドするサブクラスは、Cleanerなどの代替クリーンアップ・メカニズムを使用し、オーバーライドするfinalizeメソッドを削除するように変更する必要があります。
    実装要件:
    このInflaterがサブクラス化されていて、endメソッドがオーバーライドされている場合、インフレータに到達できない場合、endメソッドがファイナライズによって呼び出されます。 しかし、サブクラスはこの特定の実装に依存すべきではありません。ファイナライズは信頼できず、finalizeメソッドは非推奨される予定です。
    導入されたバージョン:
    1.1
    関連項目:
    Deflater
    • コンストラクタのサマリー

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

      すべてのメソッド インスタンス・メソッド 具象メソッド 非推奨のメソッド 
      修飾子と型 メソッド 説明
      void end()
      デコンプレッサを閉じ、圧縮解除された入力をすべて破棄します。
      protected void finalize()
      削除予定のため非推奨: このAPI要素は、将来のバージョンで削除される可能性があります。
      finalizeメソッドは非推奨され、削除されます。
      boolean finished()
      圧縮データ・ストリームの最後に達した場合にtrueを返します。
      int getAdler()
      圧縮解除データのADLER-32値を返します。
      long getBytesRead()
      これまでに入力された、圧縮されたバイトの総数を返します。
      long getBytesWritten()
      これまでに出力された、圧縮解除されたバイトの総数を返します。
      int getRemaining()
      入力バッファに残っているバイトの総数を返します。
      int getTotalIn()
      これまでに入力された、圧縮されたバイトの総数を返します。
      int getTotalOut()
      これまでに出力された、圧縮解除されたバイトの総数を返します。
      int inflate​(byte[] output)
      指定されたバッファにバイトを圧縮解除します。
      int inflate​(byte[] output, int off, int len)
      指定されたバッファにバイトを圧縮解除します。
      int inflate​(ByteBuffer output)
      指定されたバッファにバイトを圧縮解除します。
      boolean needsDictionary()
      プリセット・ディクショナリが圧縮解除に必要な場合にtrueを返します。
      boolean needsInput()
      入力バッファにデータが残っていない場合にtrueを返します。
      void reset()
      新しい入力データ・セットが処理できるようにインフレータをリセットします。
      void setDictionary​(byte[] dictionary)
      プリセット・ディクショナリを指定のバイト配列に設定します。
      void setDictionary​(byte[] dictionary, int off, int len)
      プリセット・ディクショナリを指定のバイト配列に設定します。
      void setDictionary​(ByteBuffer dictionary)
      リセット・ディクショナリを指定されたバッファのバイトに設定します。
      void setInput​(byte[] input)
      圧縮解除のための入力データを設定します。
      void setInput​(byte[] input, int off, int len)
      圧縮解除のための入力データを設定します。
      void setInput​(ByteBuffer input)
      圧縮解除のための入力データを設定します。
    • コンストラクタの詳細

      • 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 - 入力データの長さ
        関連項目:
        needsInput()
      • setInput

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        public boolean needsDictionary()
        プリセット・ディクショナリが圧縮解除に必要な場合にtrueを返します。
        戻り値:
        プリセット・ディクショナリが圧縮解除に必要な場合はtrue
        関連項目:
        setDictionary(byte[], int, int)
      • 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 - 圧縮データ形式が無効な場合
        関連項目:
        needsInput(), needsDictionary()
      • inflate

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

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

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

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

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

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

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

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

        パラメータ:
        output - 未圧縮データ用のバッファ
        戻り値:
        圧縮解除される実効バイト数
        例外:
        DataFormatException - 圧縮データ形式が無効な場合
        ReadOnlyBufferException - 指定された出力バッファが読取り専用の場合
        導入されたバージョン:
        11
        関連項目:
        needsInput(), needsDictionary()
      • 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オブジェクトの動作は保証されません。
      • finalize

        @Deprecated(since="9",
                    forRemoval=true)
        protected void finalize()
        削除予定のため非推奨: このAPI要素は、将来のバージョンで削除される可能性があります。
        finalizeメソッドは非推奨され、削除されます。 これはノー・オペレーションとして実装されています。 クリーンアップを実行するためにfinalizeをオーバーライドするサブクラスは、代替のクリーンアップ・メカニズムを使用し、オーバーライドするfinalizeメソッドを削除するように変更する必要があります。 コンプレッサの推奨クリーンアップは、使用されなくなったときにendメソッドを明示的に呼び出すことです。 endが明示的に呼び出されない場合、インスタンスが到達不能になるとコンプレッサのリソースが解放され、
        ガベージ・コレクションが行われたときにデコンプレッサを閉じます。
        オーバーライド:
        finalize、クラス: Object
        実装要件:
        このInflaterがサブクラス化され、endメソッドがオーバーライドされている場合、インフレータに到達できないときにendメソッドが呼び出されます。
        関連項目:
        WeakReference, PhantomReference