クラスInflater
ほかで指定がない場合、null
引数をコンストラクタまたはこのクラスのメソッドへ渡すと、NullPointerException
がスローされます。
このクラスは、ZLIB圧縮バイトの順序を変更します。 入力バイト・シーケンスは、setInput()
メソッドの1つを介してバイト配列またはバイト・バッファで提供されます。 出力バイト・シーケンスは、inflate()
メソッドに渡された出力バイト配列またはバイト・バッファに書き込まれます。
次のコード・フラグメントは、Deflater
およびInflater
を使用した文字列の簡単な圧縮および解凍を示しています。
// Encode a String into bytes
String inputString = "blahblahblah\u20AC\u20AC";
byte[] input = inputString.getBytes(StandardCharsets.UTF_8);
// Compress the bytes
ByteArrayOutputStream compressedBaos = new ByteArrayOutputStream();
Deflater compressor = new Deflater();
try {
compressor.setInput(input);
// Let the compressor know that the complete input
// has been made available
compressor.finish();
// Keep compressing the input till the compressor
// is finished compressing
while (!compressor.finished()) {
// Use some reasonable size for the temporary buffer
// based on the data being compressed
byte[] tmpBuffer = new byte[100];
int numCompressed = compressor.deflate(tmpBuffer);
// Copy over the compressed bytes from the temporary
// buffer into the final byte array
compressedBaos.write(tmpBuffer, 0, numCompressed);
}
} finally {
// Release the resources held by the compressor
compressor.end();
}
// Decompress the bytes
Inflater decompressor = new Inflater();
ByteArrayOutputStream decompressedBaos = new ByteArrayOutputStream();
try {
byte[] compressed = compressedBaos.toByteArray();
decompressor.setInput(compressed, 0, compressed.length);
while (!decompressor.finished()) {
// Use some reasonable size for the temporary buffer,
// based on the data being decompressed; in this example,
// we use a small buffer size
byte[] tmpBuffer = new byte[100];
int numDecompressed = 0;
try {
numDecompressed = decompressor.inflate(tmpBuffer);
} catch (DataFormatException dfe) {
// Handle the exception suitably, in this example
// we just rethrow it
throw new RuntimeException(dfe);
}
// Copy over the decompressed bytes from the temporary
// buffer into the final byte array
decompressedBaos.write(tmpBuffer, 0, numDecompressed);
}
} finally {
// Release the resources held by the decompressor
decompressor.end();
}
// Decode the bytes into a String
String outputString = decompressedBaos.toString(StandardCharsets.UTF_8);
- APIのノート:
- この
Inflater
によって使用されるリソースを解放するには、end()
メソッドを明示的に呼び出す必要があります。 サブクラスは、サブクラスによって獲得されたリソースのクリーンアップを担当します。 クリーンアップを実行するためにObject.finalize()
をオーバーライドするサブクラスは、Cleaner
などの代替クリーンアップ・メカニズムを使用し、オーバーライドするfinalize
メソッドを削除するように変更する必要があります。 - 導入されたバージョン:
- 1.1
- 関連項目:
-
コンストラクタのサマリー
コンストラクタ -
メソッドのサマリー
修飾子と型メソッド説明void
end()
デコンプレッサを閉じ、圧縮解除された入力をすべて破棄します。boolean
finished()
圧縮データ・ストリームの最後に達した場合にtrueを返します。int
getAdler()
圧縮解除データのADLER-32値を返します。long
これまでに入力された、圧縮されたバイトの総数を返します。long
これまでに出力された、圧縮解除されたバイトの総数を返します。int
入力バッファに残っているバイトの総数を返します。int
非推奨。int
非推奨。代わりにgetBytesWritten()
を使用してくださいint
inflate
(byte[] output) 指定されたバッファにバイトを圧縮解除します。int
inflate
(byte[] output, int off, int len) 指定されたバッファにバイトを圧縮解除します。int
inflate
(ByteBuffer output) 指定されたバッファにバイトを圧縮解除します。boolean
プリセット・ディクショナリが圧縮解除に必要な場合にtrueを返します。boolean
入力バッファにデータが残っていない場合に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) 圧縮解除のための入力データを設定します。
-
コンストラクタの詳細
-
Inflater
public Inflater(boolean nowrap) 新しいデコンプレッサを作成します。 パラメータnowrapがtrueの場合は、ZLIBヘッダーおよびチェックサム・フィールドは使用されません。 これによって、GZIPとPKZIPの両方で使用される圧縮形式との互換性が確保されます。ノート: nowrapオプションを使用する場合は、入力として特別な「ダミー」バイトを指定する必要があります。 これは、最適化を行うためにZLIBネイティブ・ライブラリで必要となります。
- パラメータ:
nowrap
- trueの場合はGZIP互換の圧縮をサポート
-
Inflater
public Inflater()新しいデコンプレッサを作成します。
-
-
メソッドの詳細
-
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) プリセット・ディクショナリを指定のバイト配列に設定します。 inflate()が0を返す場合、またはneedsDictionary()がプリセット・ディクショナリを必要とすることを示すtrueを返す場合は、このメソッドを呼び出す必要があります。 getAdler()メソッドを使用して必要なディクショナリのAdler-32値を取得できます。- パラメータ:
dictionary
- ディクショナリ・データ・バイトoff
- データの開始オフセットlen
- データの長さ- 関連項目:
-
setDictionary
public void setDictionary(byte[] dictionary) プリセット・ディクショナリを指定のバイト配列に設定します。 inflate()が0を返す場合、またはneedsDictionary()がプリセット・ディクショナリを必要とすることを示すtrueを返す場合は、このメソッドを呼び出す必要があります。 getAdler()メソッドを使用して必要なディクショナリのAdler-32値を取得できます。- パラメータ:
dictionary
- ディクショナリ・データ・バイト- 関連項目:
-
setDictionary
public void setDictionary(ByteBuffer dictionary) リセット・ディクショナリを指定されたバッファのバイトに設定します。 inflate()が0を返す場合、またはneedsDictionary()がプリセット・ディクショナリを必要とすることを示すtrueを返す場合は、このメソッドを呼び出す必要があります。 getAdler()メソッドを使用して必要なディクショナリのAdler-32値を取得できます。指定されたbyteバッファのバイトは、このメソッドによって完全に消費されます。 戻ったとき、その位置は制限と等しくなります。
- パラメータ:
dictionary
- ディクショナリ・データ・バイト- 導入されたバージョン:
- 11
- 関連項目:
-
getRemaining
public int getRemaining()入力バッファに残っているバイトの総数を返します。 このメソッドは、圧縮解除が終了したあとに入力バッファに何バイト残っているかを調べるのに使用できます。- 戻り値:
- 入力バッファに残っているバイトの総数
-
needsInput
public boolean needsInput()入力バッファにデータが残っていない場合にtrueを返します。 これを使用して、より多くの入力を提供するために、setInput()
メソッドの1つをコールする必要があるかどうかを判断できます。- 戻り値:
- 入力バッファにデータが残っていない場合はtrue
-
needsDictionary
public boolean needsDictionary()プリセット・ディクショナリが圧縮解除に必要な場合にtrueを返します。- 戻り値:
- プリセット・ディクショナリが圧縮解除に必要な場合はtrue
- 関連項目:
-
finished
public boolean finished()圧縮データ・ストリームの最後に達した場合にtrueを返します。- 戻り値:
- 圧縮データ・ストリームの最後に達した場合はtrue
-
inflate
public int inflate(byte[] output, int off, int len) throws DataFormatException 指定されたバッファにバイトを圧縮解除します。 実際に圧縮解除されたバイト数を返します。 戻り値0は、入力データやプリセット・ライブラリがさらに必要かどうかを判断するためにneedsInput()またはneedsDictionary()を呼び出す必要があることを示します。 後者の場合、getAdler()を使用して、要求されるディクショナリのAdler-32値を取得できます。setInput(ByteBuffer)
メソッドがコールされ、入力にバッファが提供された場合、DataFormatException
がスローされた場合でも、この操作で使用されるバイト数が入力バッファ位置の拡張されます。「残りのバイト数」は、使用される入力バイト数だけ削減されます。
setInput(ByteBuffer)
メソッドがコールされて入力用のバッファが指定された場合、入力バッファ位置は使用バイト数に進みます。これらのバイトの合計と「読み取られた合計バイト数」および「書き込まれた合計バイト数」の値は、例外が発生する前に消費されて生成されたデータの量を反映するために
DataFormatException
がスローされた場合でも更新されます。- パラメータ:
output
- 未圧縮データ用のバッファoff
- データの開始オフセットlen
- 圧縮解除される最大バイト数- 戻り値:
- 圧縮解除される実効バイト数
- スロー:
DataFormatException
- 圧縮データ形式が無効な場合- 関連項目:
-
inflate
public int inflate(byte[] output) throws DataFormatException 指定されたバッファにバイトを圧縮解除します。 実際に圧縮解除されたバイト数を返します。 戻り値0は、入力データやプリセット・ライブラリがさらに必要かどうかを判断するためにneedsInput()またはneedsDictionary()を呼び出す必要があることを示します。 後者の場合、getAdler()を使用して、要求されるディクショナリのAdler-32値を取得できます。「残りのバイト数」は、使用される入力バイト数だけ削減されます。
setInput(ByteBuffer)
メソッドがコールされて入力用のバッファが指定された場合、入力バッファ位置は使用バイト数に進みます。これらのバイトの合計と「読み取られた合計バイト数」および「書き込まれた合計バイト数」の値は、例外が発生する前に消費されて生成されたデータの量を反映するために
DataFormatException
がスローされた場合でも更新されます。- パラメータ:
output
- 未圧縮データ用のバッファ- 戻り値:
- 圧縮解除される実効バイト数
- スロー:
DataFormatException
- 圧縮データ形式が無効な場合- 関連項目:
-
inflate
public int inflate(ByteBuffer output) throws DataFormatException 指定されたバッファにバイトを圧縮解除します。 実際に圧縮解除されたバイト数を返します。 戻り値0は、入力データやプリセット・ライブラリがさらに必要かどうかを判断するためにneedsInput()またはneedsDictionary()を呼び出す必要があることを示します。 後者の場合、getAdler()を使用して、要求されるディクショナリのAdler-32値を取得できます。成功すると、指定された
output
バイト・バッファの位置が操作によって生成されたバイト数だけ拡大されます。これは、このメソッドによって返された数と同じです。DataFormatException
がスローされた場合でも、output
バッファの位置は拡張されます。「残りのバイト数」は、使用される入力バイト数だけ削減されます。
setInput(ByteBuffer)
メソッドがコールされて入力用のバッファが指定された場合、入力バッファ位置は使用バイト数に進みます。これらのバイトの合計と「読み取られた合計バイト数」および「書き込まれた合計バイト数」の値は、例外が発生する前に消費されて生成されたデータの量を反映するために
DataFormatException
がスローされた場合でも更新されます。- パラメータ:
output
- 未圧縮データ用のバッファ- 戻り値:
- 圧縮解除される実効バイト数
- スロー:
DataFormatException
- 圧縮データ形式が無効な場合ReadOnlyBufferException
- 指定された出力バッファが読取り専用の場合- 導入されたバージョン:
- 11
- 関連項目:
-
getAdler
public int getAdler()圧縮解除データのADLER-32値を返します。- 戻り値:
- 圧縮解除データのADLER-32値
-
getTotalIn
@Deprecated(since="23") public int getTotalIn()非推奨。代わりにgetBytesRead()
を使用してくださいこれまでに入力された、圧縮されたバイトの総数を返します。- 実装要件:
- このメソッドは
(int) getBytesRead()
と同等のものを返すため、Integer.MAX_VALUE
より大きい場合、正しい値を返すことはできません。 - 戻り値:
- これまでに入力された、圧縮されたバイトの総数
-
getBytesRead
public long getBytesRead()これまでに入力された、圧縮されたバイトの総数を返します。- 戻り値:
- これまでに入力された、圧縮されたバイトの総数(負ではない値)
- 導入されたバージョン:
- 1.5
-
getTotalOut
@Deprecated(since="23") public int getTotalOut()非推奨。代わりにgetBytesWritten()
を使用してくださいこれまでに出力された、圧縮解除されたバイトの総数を返します。- 実装要件:
- このメソッドは
(int) getBytesWritten()
と同等のものを返すため、Integer.MAX_VALUE
より大きい場合、正しい値を返すことはできません。 - 戻り値:
- これまでに出力された、圧縮解除されたバイトの総数
-
getBytesWritten
public long getBytesWritten()これまでに出力された、圧縮解除されたバイトの総数を返します。- 戻り値:
- これまでに出力された、圧縮解除されたバイトの総数(負ではない値)
- 導入されたバージョン:
- 1.5
-
reset
public void reset()新しい入力データ・セットが処理できるようにインフレータをリセットします。 -
end
public void end()デコンプレッサを閉じ、圧縮解除された入力をすべて破棄します。 このメソッドは、デコンプレッサが使用されなくなったときに呼び出される必要があります。 このメソッドが呼び出されたあとのInflaterオブジェクトの動作は保証されません。
-
getBytesRead()
を使用してください