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

クラスDeflater



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

    次に、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
     }
     
    導入されたバージョン:
    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[] b)
      入力データを圧縮し、指定されたバッファに圧縮されたデータを挿入します。
      int deflate​(byte[] b, int off, int len)
      入力データを圧縮し、指定されたバッファに圧縮されたデータを挿入します。
      int deflate​(byte[] b, int off, int len, int flush)
      入力データを圧縮し、指定されたバッファに圧縮されたデータを挿入します。
      void end​()
      コンプレッサを閉じ、圧縮解除された入力をすべて破棄します。
      protected void finalize​()
      非推奨。 
      finalizeメソッドは推奨されていません。 クリーンアップを実行するためにfinalizeをオーバーライドするサブクラスは、代替クリーンアップ・メカニズムを使用し、オーバーライドするfinalizeメソッドを削除するように変更する必要があります。 finalizeメソッドをオーバーライドする場合、実装では、super.finalize()Object.finalize()の説明に従って呼び出されることを明示的に確認する必要があります。 移行オプションの詳細については、Object.finalize()の仕様を参照してください。
      void finish​()
      このメソッドが呼び出されると、圧縮が入力バッファの現在の内容で終了する必要があることを示します。
      boolean finished​()
      圧縮データ出力ストリームの最後に達した場合にtrueを返します。
      int getAdler​()
      圧縮解除データのADLER-32値を返します。
      long getBytesRead​()
      これまでに入力された、圧縮解除されたバイトの総数を返します。
      long getBytesWritten​()
      これまでに出力された、圧縮されたバイトの総数を返します。
      int getTotalIn​()
      これまでに入力された、圧縮解除されたバイトの総数を返します。
      int getTotalOut​()
      これまでに出力された、圧縮されたバイトの総数を返します。
      boolean needsInput​()
      入力データ・バッファが空なので、さらに入力を提供するためにsetInput()を呼び出す必要がある場合にtrueを返します。
      void reset​()
      新しい入力データのセットを処理できるようにデフレータをリセットします。
      void setDictionary​(byte[] b)
      圧縮のためのプリセット・ディクショナリを設定します。
      void setDictionary​(byte[] b, int off, int len)
      圧縮のためのプリセット・ディクショナリを設定します。
      void setInput​(byte[] b)
      圧縮のための入力データを設定します。
      void setInput​(byte[] b, int off, int len)
      圧縮のための入力データを設定します。
      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[] b,
                             int off,
                             int len)
        圧縮のための入力データを設定します。 needsInput()でさらに入力が必要であることを示すtrueが返されるときは、このメソッドを呼び出す必要があります。
        パラメータ:
        b - 入力データ・バイト
        off - データの開始オフセット
        len - データの長さ
        関連項目:
        needsInput()
      • setInput

        public void setInput​(byte[] b)
        圧縮のための入力データを設定します。 needsInput()でさらに入力が必要であることを示すtrueが返されるときは、このメソッドを呼び出す必要があります。
        パラメータ:
        b - 入力データ・バイト
        関連項目:
        needsInput()
      • setDictionary

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

        public void setDictionary​(byte[] b)
        圧縮のためのプリセット・ディクショナリを設定します。 プリセット・ディクショナリは、履歴バッファがあらかじめ決定できるときに使用されます。 データがあとでInflater.inflate()によって圧縮解除されるときに、Inflater.getAdler()を呼び出して圧縮解除に必要なディクショナリのAdler-32値を取得できます。
        パラメータ:
        b - ディクショナリ・データ・バイト
        関連項目:
        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​()
        入力データ・バッファが空なので、さらに入力を提供するためにsetInput()を呼び出す必要がある場合にtrueを返します。
        戻り値:
        入力データ・バッファが空なので、さらに入力を提供するためにsetInput()を呼び出す必要がある場合はtrue
      • finish

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

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

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

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

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

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

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

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

        public int deflate​(byte[] b,
                           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バイト)が出力バッファに繰り返し出力されないようにしてください。

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

        @Deprecated(since="9")
        protected void finalize​()
        非推奨。 finalizeメソッドは推奨されていません。 クリーンアップを実行するためにfinalizeをオーバーライドするサブクラスは、代替クリーンアップ・メカニズムを使用し、オーバーライドするfinalizeメソッドを削除するように変更する必要があります。 finalizeメソッドをオーバーライドする場合、実装では、super.finalize()Object.finalize()の説明に従って呼び出されることを明示的に確認する必要があります。 移行オプションの詳細については、Object.finalize()の仕様を参照してください。
        ガベージ・コレクションが行われたときにコンプレッサを閉じます。
        オーバーライド:
        finalize、クラス: Object
        関連項目:
        WeakReference, PhantomReference