- java.lang.Object
-
- 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 }- APIの注:
- この
Deflaterによって使用されるリソースを解放するには、end()メソッドを明示的に呼び出す必要があります。 サブクラスは、サブクラスによって獲得されたリソースのクリーンアップを担当します。 クリーンアップを実行するためにfinalize()をオーバーライドするサブクラスは、Cleanerなどの代替クリーンアップ・メカニズムを使用し、オーバーライドするfinalizeメソッドを削除するように変更する必要があります。 - 実装要件:
- この
Deflaterがサブクラス化されていて、endメソッドがオーバーライドされている場合、デフラータに到達できないときに終了によってendメソッドが呼び出されます。 しかし、サブクラスはこの特定の実装に依存すべきではありません。ファイナライズは信頼できず、finalizeメソッドは非推奨される予定です。 - 導入されたバージョン:
- 1.1
- 関連項目:
Inflater
-
-
フィールドのサマリー
フィールド 修飾子と型 フィールド 説明 static intBEST_COMPRESSION最適な圧縮のための圧縮レベルです。static intBEST_SPEED最高速での圧縮のための圧縮レベルです。static intDEFAULT_COMPRESSIONデフォルトの圧縮レベルです。static intDEFAULT_STRATEGYデフォルトの圧縮方法です。static intDEFLATEDdeflateアルゴリズムのための圧縮メソッド(現在サポートされているのは1つだけ)です。static intFILTERED小さい値がある程度ランダムに分布しているデータに最適な圧縮方法です。static intFULL_FLUSH保留中のすべての出力をフラッシュし、デフレータをリセットするために使用される圧縮フラッシュ・モードです。static intHUFFMAN_ONLYハフマン符号化だけのための圧縮方法です。static intNO_COMPRESSION圧縮しない場合の圧縮レベルです。static intNO_FLUSH最高の圧縮結果を実現するために使用される圧縮フラッシュ・モードです。static intSYNC_FLUSH保留中のすべての出力をフラッシュするために使用される圧縮フラッシュ・モードで、一部の圧縮アルゴリズムでは圧縮率が低下することがあります。
-
メソッドのサマリー
すべてのメソッド インスタンス・メソッド 具象メソッド 非推奨のメソッド 修飾子と型 メソッド 説明 intdeflate(byte[] b)入力データを圧縮し、指定されたバッファに圧縮されたデータを挿入します。intdeflate(byte[] b, int off, int len)入力データを圧縮し、指定されたバッファに圧縮されたデータを挿入します。intdeflate(byte[] b, int off, int len, int flush)入力データを圧縮し、指定されたバッファに圧縮されたデータを挿入します。voidend()コンプレッサを閉じ、圧縮解除された入力をすべて破棄します。protected voidfinalize()削除予定のため非推奨: このAPI要素は、将来のバージョンで削除される可能性があります。finalizeメソッドは非推奨され、削除されます。voidfinish()このメソッドが呼び出されると、圧縮が入力バッファの現在の内容で終了する必要があることを示します。booleanfinished()圧縮データ出力ストリームの最後に達した場合にtrueを返します。intgetAdler()圧縮解除データのADLER-32値を返します。longgetBytesRead()これまでに入力された、圧縮解除されたバイトの総数を返します。longgetBytesWritten()これまでに出力された、圧縮されたバイトの総数を返します。intgetTotalIn()これまでに入力された、圧縮解除されたバイトの総数を返します。intgetTotalOut()これまでに出力された、圧縮されたバイトの総数を返します。booleanneedsInput()入力データ・バッファが空なので、さらに入力を提供するためにsetInput()を呼び出す必要がある場合にtrueを返します。voidreset()新しい入力データのセットを処理できるようにデフレータをリセットします。voidsetDictionary(byte[] b)圧縮のためのプリセット・ディクショナリを設定します。voidsetDictionary(byte[] b, int off, int len)圧縮のためのプリセット・ディクショナリを設定します。voidsetInput(byte[] b)圧縮のための入力データを設定します。voidsetInput(byte[] b, int off, int len)圧縮のための入力データを設定します。voidsetLevel(int level)圧縮レベルを指定された値に設定します。voidsetStrategy(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
デフォルトの圧縮方法です。- 関連項目:
- 定数フィールド値
-
NO_FLUSH
public static final int NO_FLUSH
最高の圧縮結果を実現するために使用される圧縮フラッシュ・モード。- 導入されたバージョン:
- 1.7
- 関連項目:
deflate(byte[], int, int, int)、定数フィールド値
-
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()
コンプレッサを閉じ、圧縮解除された入力をすべて破棄します。 このメソッドは、コンプレッサが使用されなくなったときに呼び出される必要があります。 このメソッドが呼び出されたあとのDeflaterオブジェクトの動作は保証されません。
-
finalize
@Deprecated(since="9", forRemoval=true) protected void finalize()
削除予定のため非推奨: このAPI要素は、将来のバージョンで削除される可能性があります。finalizeメソッドは非推奨され、削除されます。 これはノー・オペレーションとして実装されています。 クリーンアップを実行するためにfinalizeをオーバーライドするサブクラスは、代替クリーンアップ・メカニズムを使用し、オーバーライドするfinalizeメソッドを削除するように変更する必要があります。 コンプレッサの推奨クリーンアップは、使用されなくなったときにendメソッドを明示的に呼び出すことです。endが明示的に呼び出されないと、インスタンスが到達不能になったときにコンプレッサのリソースが解放されます。ガベージ・コレクションが行われたときにコンプレッサを閉じます。- オーバーライド:
finalize、クラス:Object- 関連項目:
WeakReference,PhantomReference
-
-