クラスInflater
- すべての実装されたインタフェース:
AutoCloseable
ほかで指定がない場合、null引数をコンストラクタまたはこのクラスのメソッドへ渡すと、NullPointerExceptionがスローされます。
このクラスは、ZLIB圧縮バイトの順序を変更します。 入力バイト順序は、setInput()メソッドのいずれかを介して、バイト配列またはByteBufferのいずれかで指定されます。 出力バイト順序は、出力バイト配列またはinflate()メソッドに渡されるByteBufferに書き込まれます。
Inflaterで使用されるリソースを解放するには、アプリケーションはend()またはclose()メソッドを起動してリソースを閉じる必要があります。
- APIのノート:
- このクラスは、
try-with-resources文の使用を容易にするためにAutoCloseableを実装します。 close()メソッドは、単にend()をコールします。次のコード・フラグメントは、
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(); try (Deflater compressor = new Deflater()) { 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); } } // Decompress the bytes ByteArrayOutputStream decompressedBaos = new ByteArrayOutputStream(); try (Inflater decompressor = new Inflater()) { 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); } } // Decode the bytes into a String String outputString = decompressedBaos.toString(StandardCharsets.UTF_8); - 導入されたバージョン:
- 1.1
- 関連項目:
-
コンストラクタのサマリー
コンストラクタ -
メソッドのサマリー
修飾子と型メソッド説明voidclose()このInflaterによって保持されているリソースを閉じて解放し、未処理の入力を破棄します。voidend()このInflaterによって保持されているリソースを閉じて解放し、未処理の入力を破棄します。booleanfinished()圧縮データ・ストリームの最後に達した場合にtrueを返します。intgetAdler()圧縮解除データのADLER-32値を返します。longこれまでに入力された、圧縮されたバイトの総数を返します。longこれまでに出力された、圧縮解除されたバイトの総数を返します。int入力バッファに残っているバイトの総数を返します。int非推奨。int非推奨。代わりにgetBytesWritten()を使用してくださいintinflate(byte[] output) 指定されたバッファにバイトを圧縮解除します。intinflate(byte[] output, int off, int len) 指定されたバッファにバイトを圧縮解除します。intinflate(ByteBuffer output) 指定されたバッファにバイトを圧縮解除します。booleanプリセット・ディクショナリが圧縮解除に必要な場合にtrueを返します。boolean入力バッファにデータが残っていない場合に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) 圧縮解除のための入力データを設定します。
-
コンストラクタの詳細
-
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- データの長さ- スロー:
IllegalStateException- インフレータがクローズされている場合- 関連項目:
-
setDictionary
public void setDictionary(byte[] dictionary) プリセット・ディクショナリを指定のバイト配列に設定します。 inflate()が0を返す場合、またはneedsDictionary()がプリセット・ディクショナリを必要とすることを示すtrueを返す場合は、このメソッドを呼び出す必要があります。 getAdler()メソッドを使用して必要なディクショナリのAdler-32値を取得できます。- パラメータ:
dictionary- ディクショナリ・データ・バイト- スロー:
IllegalStateException- インフレータがクローズされている場合- 関連項目:
-
setDictionary
public void setDictionary(ByteBuffer dictionary) リセット・ディクショナリを指定されたバッファのバイトに設定します。 inflate()が0を返す場合、またはneedsDictionary()がプリセット・ディクショナリを必要とすることを示すtrueを返す場合は、このメソッドを呼び出す必要があります。 getAdler()メソッドを使用して必要なディクショナリのAdler-32値を取得できます。指定されたbyteバッファのバイトは、このメソッドによって完全に消費されます。 戻ったとき、その位置は制限と等しくなります。
- パラメータ:
dictionary- ディクショナリ・データ・バイト- スロー:
IllegalStateException- インフレータがクローズされている場合- 導入されたバージョン:
- 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- 圧縮データ形式が無効な場合IllegalStateException- インフレータがクローズされている場合- 関連項目:
-
inflate
public int inflate(byte[] output) throws DataFormatException 指定されたバッファにバイトを圧縮解除します。 実際に圧縮解除されたバイト数を返します。 戻り値0は、入力データやプリセット・ライブラリがさらに必要かどうかを判断するためにneedsInput()またはneedsDictionary()を呼び出す必要があることを示します。 後者の場合、getAdler()を使用して、要求されるディクショナリのAdler-32値を取得できます。「残りのバイト数」は、使用される入力バイト数だけ削減されます。
setInput(ByteBuffer)メソッドがコールされて入力用のバッファが指定された場合、入力バッファ位置は使用バイト数に進みます。これらのバイトの合計と「読み取られた合計バイト数」および「書き込まれた合計バイト数」の値は、例外が発生する前に消費されて生成されたデータの量を反映するために
DataFormatExceptionがスローされた場合でも更新されます。- パラメータ:
output- 未圧縮データ用のバッファ- 戻り値:
- 圧縮解除される実効バイト数
- スロー:
DataFormatException- 圧縮データ形式が無効な場合IllegalStateException- インフレータがクローズされている場合- 関連項目:
-
inflate
public int inflate(ByteBuffer output) throws DataFormatException 指定されたバッファにバイトを圧縮解除します。 実際に圧縮解除されたバイト数を返します。 戻り値0は、入力データやプリセット・ライブラリがさらに必要かどうかを判断するためにneedsInput()またはneedsDictionary()を呼び出す必要があることを示します。 後者の場合、getAdler()を使用して、要求されるディクショナリのAdler-32値を取得できます。成功すると、指定された
outputバイト・バッファの位置が操作によって生成されたバイト数だけ拡大されます。これは、このメソッドによって返された数と同じです。DataFormatExceptionがスローされた場合でも、outputバッファの位置は拡張されます。「残りのバイト数」は、使用される入力バイト数だけ削減されます。
setInput(ByteBuffer)メソッドがコールされて入力用のバッファが指定された場合、入力バッファ位置は使用バイト数に進みます。これらのバイトの合計と「読み取られた合計バイト数」および「書き込まれた合計バイト数」の値は、例外が発生する前に消費されて生成されたデータの量を反映するために
DataFormatExceptionがスローされた場合でも更新されます。- パラメータ:
output- 未圧縮データ用のバッファ- 戻り値:
- 圧縮解除される実効バイト数
- スロー:
DataFormatException- 圧縮データ形式が無効な場合ReadOnlyBufferException- 指定された出力バッファが読取り専用の場合IllegalStateException- インフレータがクローズされている場合- 導入されたバージョン:
- 11
- 関連項目:
-
getAdler
public int getAdler()圧縮解除データのADLER-32値を返します。- 戻り値:
- 圧縮解除データのADLER-32値
- スロー:
IllegalStateException- インフレータがクローズされている場合
-
getTotalIn
@Deprecated(since="23") public int getTotalIn()非推奨。代わりにgetBytesRead()を使用してくださいこれまでに入力された、圧縮されたバイトの総数を返します。- 実装要件:
- このメソッドは
(int) getBytesRead()と同等のものを返すため、Integer.MAX_VALUEより大きい場合、正しい値を返すことはできません。 - 戻り値:
- これまでに入力された、圧縮されたバイトの総数
- スロー:
IllegalStateException- インフレータがクローズされている場合
-
getBytesRead
public long getBytesRead()これまでに入力された、圧縮されたバイトの総数を返します。- 戻り値:
- これまでに入力された、圧縮されたバイトの総数(負ではない値)
- スロー:
IllegalStateException- インフレータがクローズされている場合- 導入されたバージョン:
- 1.5
-
getTotalOut
@Deprecated(since="23") public int getTotalOut()非推奨。代わりにgetBytesWritten()を使用してくださいこれまでに出力された、圧縮解除されたバイトの総数を返します。- 実装要件:
- このメソッドは
(int) getBytesWritten()と同等のものを返すため、Integer.MAX_VALUEより大きい場合、正しい値を返すことはできません。 - 戻り値:
- これまでに出力された、圧縮解除されたバイトの総数
- スロー:
IllegalStateException- インフレータがクローズされている場合
-
getBytesWritten
public long getBytesWritten()これまでに出力された、圧縮解除されたバイトの総数を返します。- 戻り値:
- これまでに出力された、圧縮解除されたバイトの総数(負ではない値)
- スロー:
IllegalStateException- インフレータがクローズされている場合- 導入されたバージョン:
- 1.5
-
reset
public void reset()新しい入力データ・セットが処理できるようにインフレータをリセットします。- スロー:
IllegalStateException- インフレータがクローズされている場合
-
end
public void end()このInflaterによって保持されているリソースを閉じて解放し、未処理の入力を破棄します。Inflaterがすでにクローズされている場合、このメソッドの起動は効果がありません。- 実装要件:
- サブクラスが取得したリソースをクリーンアップするには、サブクラスがこのメソッドをオーバーライドする必要があります。
- 関連項目:
-
close
public void close()このInflaterによって保持されているリソースを閉じて解放し、未処理の入力を破棄します。- 定義:
close、インタフェースAutoCloseable- 実装要件:
- このメソッドは、
end()メソッドを呼び出します。 - 導入されたバージョン:
- 25
-
getBytesRead()を使用してください