public class Deflater extends Object
このクラスは、バイト・シーケンスを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
- 関連項目:
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[] output)入力データを圧縮し、指定されたバッファに圧縮されたデータを挿入します。intdeflate(byte[] output, int off, int len)入力データを圧縮し、指定されたバッファに圧縮されたデータを挿入します。intdeflate(byte[] output, int off, int len, int flush)入力データを圧縮し、指定されたバッファに圧縮されたデータを挿入します。intdeflate(ByteBuffer output)入力データを圧縮し、指定されたバッファに圧縮されたデータを挿入します。intdeflate(ByteBuffer output, int flush)入力データを圧縮し、指定されたバッファに圧縮されたデータを挿入します。voidend()コンプレッサを閉じ、圧縮解除された入力をすべて破棄します。voidfinish()このメソッドが呼び出されると、圧縮が入力バッファの現在の内容で終了する必要があることを示します。booleanfinished()圧縮データ出力ストリームの最後に達した場合にtrueを返します。intgetAdler()圧縮解除データのADLER-32値を返します。longgetBytesRead()これまでに入力された、圧縮解除されたバイトの総数を返します。longgetBytesWritten()これまでに出力された、圧縮されたバイトの総数を返します。intgetTotalIn()これまでに入力された、圧縮解除されたバイトの総数を返します。intgetTotalOut()これまでに出力された、圧縮されたバイトの総数を返します。booleanneedsInput()入力バッファにデータが残っていない場合にtrueを返します。voidreset()新しい入力データのセットを処理できるようにデフレータをリセットします。voidsetDictionary(byte[] dictionary)圧縮のためのプリセット・ディクショナリを設定します。voidsetDictionary(byte[] dictionary, int off, int len)圧縮のためのプリセット・ディクショナリを設定します。voidsetDictionary(ByteBuffer dictionary)圧縮のためのプリセット・ディクショナリを設定します。voidsetInput(byte[] input)圧縮のための入力データを設定します。voidsetInput(byte[] input, int off, int len)圧縮のための入力データを設定します。voidsetInput(ByteBuffer input)圧縮のための入力データを設定します。voidsetLevel(int level)圧縮レベルを指定された値に設定します。voidsetStrategy(int strategy)圧縮方法を指定された値に設定します。
-
フィールド詳細
-
DEFLATED
public static final int DEFLATEDdeflateアルゴリズムのための圧縮メソッド(現在サポートされているのは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[] 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オブジェクトの動作は保証されません。
-