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

クラスDeflater


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

      フィールド 
      修飾子と型 フィールド 説明
      static int BEST_COMPRESSION
      最適な圧縮のための圧縮レベルです。
      static int BEST_SPEED
      最高速での圧縮のための圧縮レベルです。
      static int DEFAULT_COMPRESSION
      デフォルトの圧縮レベルです。
      static int DEFAULT_STRATEGY
      デフォルトの圧縮方法です。
      static int DEFLATED
      deflateアルゴリズムのための圧縮メソッド(現在サポートされているのは1つだけ)です。
      static int FILTERED
      小さい値がある程度ランダムに分布しているデータに最適な圧縮方法です。
      static int FULL_FLUSH
      保留中のすべての出力をフラッシュし、デフレータをリセットするために使用される圧縮フラッシュ・モードです。
      static int HUFFMAN_ONLY
      ハフマン符号化だけのための圧縮方法です。
      static int NO_COMPRESSION
      圧縮しない場合の圧縮レベルです。
      static int NO_FLUSH
      最高の圧縮結果を実現するために使用される圧縮フラッシュ・モードです。
      static int SYNC_FLUSH
      保留中のすべての出力をフラッシュするために使用される圧縮フラッシュ・モードで、一部の圧縮アルゴリズムでは圧縮率が低下することがあります。
    • コンストラクタのサマリー

      コンストラクタ 
      コンストラクタ 説明
      Deflater()
      デフォルトの圧縮レベルで新しいコンプレッサを作成します。
      Deflater​(int level)
      指定された圧縮レベルで新しいコンプレッサを作成します。
      Deflater​(int level, boolean nowrap)
      指定された圧縮レベルで新しいコンプレッサを作成します。
    • メソッドのサマリー

      すべてのメソッド インスタンス・メソッド 具象メソッド 非推奨のメソッド 
      修飾子と型 メソッド 説明
      int deflate​(byte[] output)
      入力データを圧縮し、指定されたバッファに圧縮されたデータを挿入します。
      int deflate​(byte[] output, int off, int len)
      入力データを圧縮し、指定されたバッファに圧縮されたデータを挿入します。
      int deflate​(byte[] output, int off, int len, int flush)
      入力データを圧縮し、指定されたバッファに圧縮されたデータを挿入します。
      int deflate​(ByteBuffer output)
      入力データを圧縮し、指定されたバッファに圧縮されたデータを挿入します。
      int deflate​(ByteBuffer output, int flush)
      入力データを圧縮し、指定されたバッファに圧縮されたデータを挿入します。
      void end()
      コンプレッサを閉じ、圧縮解除された入力をすべて破棄します。
      protected void finalize()
      削除予定のため非推奨: このAPI要素は、将来のバージョンで削除される可能性があります。
      finalizeメソッドは非推奨され、削除されます。
      void finish()
      このメソッドが呼び出されると、圧縮が入力バッファの現在の内容で終了する必要があることを示します。
      boolean finished()
      圧縮データ出力ストリームの最後に達した場合にtrueを返します。
      int getAdler()
      圧縮解除データのADLER-32値を返します。
      long getBytesRead()
      これまでに入力された、圧縮解除されたバイトの総数を返します。
      long getBytesWritten()
      これまでに出力された、圧縮されたバイトの総数を返します。
      int getTotalIn()
      これまでに入力された、圧縮解除されたバイトの総数を返します。
      int getTotalOut()
      これまでに出力された、圧縮されたバイトの総数を返します。
      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)
      圧縮のための入力データを設定します。
      void setLevel​(int level)
      圧縮レベルを指定された値に設定します。
      void setStrategy​(int strategy)
      圧縮方法を指定された値に設定します。
    • フィールドの詳細

      • DEFLATED

        public static final int DEFLATED
        deflateアルゴリズムのための圧縮メソッド(現在サポートされているのは1つだけ)です。
        関連項目:
        定数フィールド値
      • NO_COMPRESSION

        public static final int NO_COMPRESSION
        圧縮しない場合の圧縮レベルです。
        関連項目:
        定数フィールド値
      • BEST_SPEED

        public static final int BEST_SPEED
        最高速での圧縮のための圧縮レベルです。
        関連項目:
        定数フィールド値
      • BEST_COMPRESSION

        public static final int BEST_COMPRESSION
        最適な圧縮のための圧縮レベルです。
        関連項目:
        定数フィールド値
      • DEFAULT_COMPRESSION

        public static final int DEFAULT_COMPRESSION
        デフォルトの圧縮レベルです。
        関連項目:
        定数フィールド値
      • FILTERED

        public static final int FILTERED
        小さい値がある程度ランダムに分布しているデータに最適な圧縮方法です。 ハフマン・コーディングを増やし、文字列マッチングを減らします。
        関連項目:
        定数フィールド値
      • HUFFMAN_ONLY

        public static final int HUFFMAN_ONLY
        ハフマン符号化だけのための圧縮方法です。
        関連項目:
        定数フィールド値
      • DEFAULT_STRATEGY

        public static final int DEFAULT_STRATEGY
        デフォルトの圧縮方法です。
        関連項目:
        定数フィールド値
      • SYNC_FLUSH

        public static final int SYNC_FLUSH
        保留中のすべての出力をフラッシュするために使用される圧縮フラッシュ・モードで、一部の圧縮アルゴリズムでは圧縮率が低下することがあります。
        導入されたバージョン:
        1.7
        関連項目:
        deflate(byte[], int, int, int)定数フィールド値
      • FULL_FLUSH

        public static final int FULL_FLUSH
        保留中のすべての出力をフラッシュし、デフレータをリセットするために使用される圧縮フラッシュ・モード。 このモードを頻繁に使用すると、圧縮率が著しく低下することがあります。
        導入されたバージョン:
        1.7
        関連項目:
        deflate(byte[], int, int, int)定数フィールド値
    • コンストラクタの詳細

      • Deflater

        public Deflater​(int level,
                        boolean nowrap)
        指定された圧縮レベルで新しいコンプレッサを作成します。 パラメータnowrapがtrueの場合、ZLIBヘッダー・フィールドおよびチェックサム・フィールドは、GZIPおよびPKZIPの両方で使用される圧縮形式のサポートには使用されません。
        パラメータ:
        level - 圧縮レベル(0 - 9)
        nowrap - trueの場合はGZIP互換の圧縮を使用
      • Deflater

        public Deflater​(int level)
        指定された圧縮レベルで新しいコンプレッサを作成します。 圧縮データはZLIB形式で生成されます。
        パラメータ:
        level - 圧縮レベル(0 - 9)
      • Deflater

        public Deflater()
        デフォルトの圧縮レベルで新しいコンプレッサを作成します。 圧縮データはZLIB形式で生成されます。
    • メソッドの詳細

      • 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)
        圧縮のためのプリセット・ディクショナリを設定します。 プリセット・ディクショナリは、履歴バッファがあらかじめ決定できるときに使用されます。 データがあとでInflater.inflate()によって圧縮解除されるときに、Inflater.getAdler()を呼び出して圧縮解除に必要なディクショナリのAdler-32値を取得できます。
        パラメータ:
        dictionary - ディクショナリ・データ・バイト
        off - データの開始オフセット
        len - データの長さ
        関連項目:
        Inflater.inflate(byte[], int, int), Inflater.getAdler()
      • setDictionary

        public void setDictionary​(byte[] dictionary)
        圧縮のためのプリセット・ディクショナリを設定します。 プリセット・ディクショナリは、履歴バッファがあらかじめ決定できるときに使用されます。 データがあとでInflater.inflate()によって圧縮解除されるときに、Inflater.getAdler()を呼び出して圧縮解除に必要なディクショナリのAdler-32値を取得できます。
        パラメータ:
        dictionary - ディクショナリ・データ・バイト
        関連項目:
        Inflater.inflate(byte[], int, int), Inflater.getAdler()
      • setDictionary

        public void setDictionary​(ByteBuffer dictionary)
        圧縮のためのプリセット・ディクショナリを設定します。 プリセット・ディクショナリは、履歴バッファがあらかじめ決定できるときに使用されます。 データがあとでInflater.inflate()によって圧縮解除されるときに、Inflater.getAdler()を呼び出して圧縮解除に必要なディクショナリのAdler-32値を取得できます。

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

        パラメータ:
        dictionary - ディクショナリ・データ・バイト
        関連項目:
        Inflater.inflate(byte[], int, int), Inflater.getAdler()
      • setStrategy

        public void setStrategy​(int strategy)
        圧縮方法を指定された値に設定します。

        圧縮方法を変更した場合、deflateの次の呼び出しでは、古い方法でこれまで使用可能な入力が圧縮されます(およびフラッシュされることがあります)。新しい方法はその呼び出しの後にのみ有効になります。

        パラメータ:
        strategy - 新しい圧縮方法
        例外:
        IllegalArgumentException - 圧縮方法が無効な場合
      • setLevel

        public void setLevel​(int level)
        圧縮レベルを指定された値に設定します。

        圧縮レベルを変更した場合、deflateの次の呼び出しでは、古いレベルでこれまで使用可能な入力が圧縮されます(およびフラッシュされることがあります)。新しいレベルはその呼び出しの後にのみ有効になります。

        パラメータ:
        level - 新しい圧縮レベル(0 - 9)
        例外:
        IllegalArgumentException - 圧縮レベルが無効な場合
      • needsInput

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

        public void finish()
        このメソッドが呼び出されると、圧縮が入力バッファの現在の内容で終了する必要があることを示します。
      • finished

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

        public int deflate​(byte[] output,
                           int off,
                           int len)
        入力データを圧縮し、指定されたバッファに圧縮されたデータを挿入します。 実際に圧縮されたデータのバイト数を返します。 戻り値0は、入力データがさらに必要かどうかを判断するためにneedsInputを呼び出す必要があることを示します。

        このメソッドは、その圧縮フラッシュ・モードとしてNO_FLUSHを使用します。 形式deflater.deflate(b, off, len)のこのメソッドの呼出しでは、deflater.deflate(b, off, len, Deflater.NO_FLUSH)の呼び出しと同じ結果が得られます。

        パラメータ:
        output - 圧縮データ用のバッファ
        off - データの開始オフセット
        len - 圧縮データの最大バイト数
        戻り値:
        出力バッファに書き込まれた圧縮データの実際のバイト数
      • deflate

        public int deflate​(byte[] output)
        入力データを圧縮し、指定されたバッファに圧縮されたデータを挿入します。 実際に圧縮されたデータのバイト数を返します。 戻り値0は、入力データがさらに必要かどうかを判断するためにneedsInputを呼び出す必要があることを示します。

        このメソッドは、その圧縮フラッシュ・モードとしてNO_FLUSHを使用します。 形式deflater.deflate(b)のこのメソッドの呼出しでは、deflater.deflate(b, 0, b.length, Deflater.NO_FLUSH)の呼び出しと同じ結果が得られます。

        パラメータ:
        output - 圧縮データ用のバッファ
        戻り値:
        出力バッファに書き込まれた圧縮データの実際のバイト数
      • deflate

        public int deflate​(ByteBuffer output)
        入力データを圧縮し、指定されたバッファに圧縮されたデータを挿入します。 実際に圧縮されたデータのバイト数を返します。 戻り値0は、入力データがさらに必要かどうかを判断するためにneedsInputを呼び出す必要があることを示します。

        このメソッドは、その圧縮フラッシュ・モードとしてNO_FLUSHを使用します。 deflater.deflate(output)形式のこのメソッドを呼び出すと、deflater.deflate(output, Deflater.NO_FLUSH)の呼出しと同じ結果が得られます。

        パラメータ:
        output - 圧縮データ用のバッファ
        戻り値:
        出力バッファに書き込まれた圧縮データの実際のバイト数
        導入されたバージョン:
        11
      • deflate

        public int deflate​(byte[] output,
                           int off,
                           int len,
                           int flush)
        入力データを圧縮し、指定されたバッファに圧縮されたデータを挿入します。 実際に圧縮されたデータのバイト数を返します。

        圧縮フラッシュ・モードは、次の3つのモードのいずれかになります。

        • NO_FLUSH: 最高の圧縮を達成するために、デフレータが出力を生成するまでに蓄積されるデータの量を決定できるようにします(通常の使用シナリオで使用する)。 このフラッシュ・モードでの戻り値0は、入力データがさらに必要かどうかを判断するためにneedsInput()を呼び出すべきであることを示します。
        • SYNC_FLUSH: 圧縮されたデータに機能するインフレータがそれまでに使用可能なすべての入力データを取得できるようにするため、デフレータのすべての保留中の出力が指定された出力バッファにフラッシュされます(特に、needsInput()は十分な出力スペースが提供されている場合、この呼出しのあとにtrueを返す)。 SYNC_FLUSHを使用してフラッシュすると、一部の圧縮アルゴリズムで圧縮率が低下することがあるため、これは必要な場合にのみ使用してください。
        • FULL_FLUSH: SYNC_FLUSHと同じように、すべての保留中の出力がフラッシュされます。 圧縮状態がリセットされるため、圧縮された出力データに機能するインフレータは、前の圧縮データが破損したか、ランダム・アクセスが要求されている場合に、このポイントから再開できます。 FULL_FLUSHを頻繁に使用すると、圧縮率が著しく低下することがあります。

        FULL_FLUSHまたはSYNC_FLUSHの例で、戻り値がlen (出力バッファbの使用可能な領域)の場合、このメソッドは同じflushパラメータともっと大きな出力領域で再度呼び出してください。 lenが6以上であることを確認して、このメソッドが呼び出されるたびに出力マーカー(5バイト)が出力バッファに繰り返し出力されないようにしてください。

        setInput(ByteBuffer)メソッドがコールされ、入力にバッファが提供された場合、入力バッファの位置は、この操作で消費されるバイト数だけ増加します。

        パラメータ:
        output - 圧縮データ用のバッファ
        off - データの開始オフセット
        len - 圧縮データの最大バイト数
        flush - 圧縮フラッシュ・モード
        戻り値:
        出力バッファに書き込まれた圧縮データの実際のバイト数
        例外:
        IllegalArgumentException - フラッシュ・モードが無効な場合
        導入されたバージョン:
        1.7
      • deflate

        public int deflate​(ByteBuffer output,
                           int flush)
        入力データを圧縮し、指定されたバッファに圧縮されたデータを挿入します。 実際に圧縮されたデータのバイト数を返します。

        圧縮フラッシュ・モードは、次の3つのモードのいずれかになります。

        • NO_FLUSH: 最高の圧縮を達成するために、デフレータが出力を生成するまでに蓄積されるデータの量を決定できるようにします(通常の使用シナリオで使用する)。 このフラッシュ・モードでの戻り値0は、入力データがさらに必要かどうかを判断するためにneedsInput()を呼び出すべきであることを示します。
        • SYNC_FLUSH: 圧縮されたデータに機能するインフレータがそれまでに使用可能なすべての入力データを取得できるようにするため、デフレータのすべての保留中の出力が指定された出力バッファにフラッシュされます(特に、needsInput()は十分な出力スペースが提供されている場合、この呼出しのあとにtrueを返す)。 SYNC_FLUSHを使用してフラッシュすると、一部の圧縮アルゴリズムで圧縮率が低下することがあるため、これは必要な場合にのみ使用してください。
        • FULL_FLUSH: SYNC_FLUSHと同じように、すべての保留中の出力がフラッシュされます。 圧縮状態がリセットされるため、圧縮された出力データに機能するインフレータは、前の圧縮データが破損したか、ランダム・アクセスが要求されている場合に、このポイントから再開できます。 FULL_FLUSHを頻繁に使用すると、圧縮率が著しく低下することがあります。

        FULL_FLUSHまたはSYNC_FLUSHの場合、戻り値がバッファの「残りの領域」と等しい場合は、このメソッドを同じflushパラメータとより多くの出力領域を使用して再度呼び出す必要があります。 このメソッドが呼び出されるたびに、(5バイト)が出力バッファに繰り返し出力されるマーカーを回避するために、バッファには残りの領域が6バイト以上あることを確認してください。

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

        setInput(ByteBuffer)メソッドがコールされ、入力にバッファが提供された場合、入力バッファの位置は、この操作で消費されるバイト数だけ増加します。

        パラメータ:
        output - 圧縮データ用のバッファ
        flush - 圧縮フラッシュ・モード
        戻り値:
        出力バッファに書き込まれた圧縮データの実際のバイト数
        例外:
        IllegalArgumentException - フラッシュ・モードが無効な場合
        導入されたバージョン:
        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()
        コンプレッサを閉じ、圧縮解除された入力をすべて破棄します。 このメソッドは、コンプレッサが使用されなくなったときに呼び出される必要があります。 このメソッドが呼び出されたあとのDeflaterオブジェクトの動作は保証されません。
      • finalize

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