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

クラスDeflater

java.lang.Object
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()メソッドを明示的に呼び出す必要があります。 サブクラスは、サブクラスによって獲得されたリソースのクリーンアップを担当します。 クリーンアップを実行するためにObject.finalize()をオーバーライドするサブクラスは、Cleanerなどの代替クリーンアップ・メカニズムを使用し、オーバーライドするfinalizeメソッドを削除するように変更する必要があります。
導入されたバージョン:
1.1
関連項目:
  • フィールドのサマリー

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

    コンストラクタ
    コンストラクタ
    説明
    デフォルトの圧縮レベルで新しいコンプレッサを作成します。
    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
    入力データを圧縮し、指定されたバッファに圧縮されたデータを挿入します。
    int
    deflate(ByteBuffer output, int flush)
    入力データを圧縮し、指定されたバッファに圧縮されたデータを挿入します。
    void
    end()
    コンプレッサを閉じ、圧縮解除された入力をすべて破棄します。
    void
    このメソッドが呼び出されると、圧縮が入力バッファの現在の内容で終了する必要があることを示します。
    boolean
    圧縮データ出力ストリームの最後に達した場合にtrueを返します。
    int
    圧縮解除データのADLER-32値を返します。
    long
    これまでに入力された、圧縮解除されたバイトの総数を返します。
    long
    これまでに出力された、圧縮されたバイトの総数を返します。
    int
    これまでに入力された、圧縮解除されたバイトの総数を返します。
    int
    これまでに出力された、圧縮されたバイトの総数を返します。
    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
    圧縮のための入力データを設定します。
    void
    setLevel(int level)
    圧縮レベルを指定された値に設定します。
    void
    setStrategy(int strategy)
    圧縮方法を指定された値に設定します。

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

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • フィールド詳細

    • 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
      デフォルトの圧縮方法です。
      関連項目:
    • NO_FLUSH

      public static final int NO_FLUSH
      最高の圧縮結果を実現するために使用される圧縮フラッシュ・モード。
      導入されたバージョン:
      1.7
      関連項目:
    • SYNC_FLUSH

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

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

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

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

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

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

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