# Class InflaterOutputStream

java.lang.Object
java.io.OutputStream
java.io.FilterOutputStream
java.util.zip.InflaterOutputStream

All Implemented Interfaces:
  `Closeable, Flushable, AutoCloseable`

public class InflaterOutputStream extends FilterOutputStream
Implements an output stream filter for decompressing data stored in the "deflate" compression format.

## Decompressor Usage

An `InflaterOutputStream` created without specifying a decompressor will create a decompressor at construction time, and close the decompressor when the output stream is closed or when `finish()` is called.

If a decompressor is specified when creating a `InflaterOutputStream`, it is the responsibility of the caller to close the decompressor after closing the output stream.

API Note:
  The `close()` method should be called to release resources used by this stream, either directly, or with the `try`-with-resources statement.
Since:
  1.6
See Also:
  - `InflaterInputStream`
  - `DeflaterInputStream`
  - `DeflaterOutputStream`

## Field Summary

Fields
Modifier and Type
Field
Description
`protected final byte[]`
`buf`
Output buffer for writing decompressed data.
`protected final Inflater`
`inf`
Decompressor for this stream.

### Fields declared in class FilterOutputStream

`out`
Modifier and Type
Field
Description
`protected OutputStream`
`out`
The underlying output stream to be filtered.

## Constructor Summary

Constructors
Constructor
Description
`InflaterOutputStream(OutputStream out)`
Creates a new output stream and decompressor with a default buffer size.
`InflaterOutputStream(OutputStream out, Inflater infl)`
Creates a new output stream with the specified decompressor and a default buffer size.
`InflaterOutputStream(OutputStream out, Inflater infl, int bufLen)`
Creates a new output stream with the specified decompressor and buffer size.

## Method Summary

Modifier and Type
Method
Description
`void`
`close()`
Writes any remaining decompressed data to the output stream and closes the underlying output stream.
`void`
`finish()`
Writes any pending buffered decompressed data to the underlying output stream, without closing the underlying stream.
`void`
`flush()`
Flushes this output stream, writing any pending buffered decompressed data to the underlying output stream.
`void`
`write(byte[] b, int off, int len)`
Writes an array of bytes to the decompressed output stream.
`void`
`write(int b)`
Writes a byte to the decompressed output stream.

### Methods declared in class FilterOutputStream

`write`
Modifier and Type
Method
Description
`void`
`write(byte[] b)`
Writes `b.length` bytes to this output stream.

### Methods declared in class OutputStream

`nullOutputStream`
Modifier and Type
Method
Description
`static OutputStream`
`nullOutputStream()`
Returns a new `OutputStream` which discards all bytes.

### Methods declared in class Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`
Modifier and Type
Method
Description
`protected Object`
`clone()`
Creates and returns a copy of this object.
`boolean`
`equals(Object obj)`
Indicates whether some other object is "equal to" this one.
`protected void`
`finalize()`
Deprecated, for removal: This API element is subject to removal in a future version.
Finalization is deprecated and subject to removal in a future release.
`final Class<?>`
`getClass()`
Returns the runtime class of this `Object`.
`int`
`hashCode()`
Returns a hash code value for this object.
`final void`
`notify()`
Wakes up a single thread that is waiting on this object's monitor.
`final void`
`notifyAll()`
Wakes up all threads that are waiting on this object's monitor.
`String`
`toString()`
Returns a string representation of the object.
`final void`
`wait()`
Causes the current thread to wait until it is awakened, typically by being notified or interrupted.
`final void`
`wait(long timeoutMillis)`
Causes the current thread to wait until it is awakened, typically by being notified or interrupted, or until a certain amount of real time has elapsed.
`final void`
`wait(long timeoutMillis, int nanos)`
Causes the current thread to wait until it is awakened, typically by being notified or interrupted, or until a certain amount of real time has elapsed.

## Field Details

### inf

protected final Inflater inf
Decompressor for this stream.

### buf

protected final byte[] buf
Output buffer for writing decompressed data.

## Constructor Details

### InflaterOutputStream

public InflaterOutputStream(OutputStream out)
Creates a new output stream and decompressor with a default buffer size.

The decompressor will be closed when this output stream is closed.

Parameters:
  `out` - output stream to write the decompressed data to
Throws:
  `NullPointerException` - if `out` is null

### InflaterOutputStream

public InflaterOutputStream(OutputStream out, Inflater infl)
Creates a new output stream with the specified decompressor and a default buffer size.

Closing this output stream will not close the given decompressor.

Parameters:
  `out` - output stream to write the decompressed data to
  `infl` - decompressor ("inflater") for this stream
Throws:
  `NullPointerException` - if `out` or `infl` is null

### InflaterOutputStream

public InflaterOutputStream(OutputStream out, Inflater infl, int bufLen)
Creates a new output stream with the specified decompressor and buffer size.

Closing this output stream will not close the given decompressor.

Parameters:
  `out` - output stream to write the decompressed data to
  `infl` - decompressor ("inflater") for this stream
  `bufLen` - decompression buffer size
Throws:
  `IllegalArgumentException` - if `bufLen <= 0`
  `NullPointerException` - if `out` or `infl` is null

## Method Details

### close

public void close() throws IOException
Writes any remaining decompressed data to the output stream and closes the underlying output stream.

Specified by:
  `close` in interface `AutoCloseable`
Specified by:
  `close` in interface `Closeable`
Overrides:
  `close` in class `FilterOutputStream`
Implementation Requirements:
  If not already closed, this method calls `finish()` before closing the underlying output stream.
Throws:
  `IOException` - if an I/O error occurs
See Also:
  - `FilterOutputStream.flush()`
  - `FilterOutputStream.out`

### flush

public void flush() throws IOException
Flushes this output stream, writing any pending buffered decompressed data to the underlying output stream.

Specified by:
  `flush` in interface `Flushable`
Overrides:
  `flush` in class `FilterOutputStream`
Throws:
  `IOException` - if an I/O error occurs or this stream is already closed
See Also:
  - `FilterOutputStream.out`

### finish

public void finish() throws IOException
Writes any pending buffered decompressed data to the underlying output stream, without closing the underlying stream.

Implementation Requirements:
  This method calls `flush()` to write any pending buffered decompressed data.

  If this `InflaterOutputStream` was created without specifying a decompressor, then this method closes the decompressor that was created at construction time. The `InflaterOutputStream` cannot then be used for any further writes.

Throws:
  `IOException` - if an I/O error occurs or this stream is already closed

### write

public void write(int b) throws IOException
Writes a byte to the decompressed output stream.

Overrides:
  `write` in class `FilterOutputStream`
Parameters:
  `b` - a single byte of compressed data to decompress and write to the output stream
Throws:
  `IOException` - if an I/O error occurs or this stream is already closed
  `ZipException` - if a compression (ZIP) format error occurs

### write

public void write(byte[] b, int off, int len) throws IOException
Writes an array of bytes to the decompressed output stream.

Overrides:
  `write` in class `FilterOutputStream`
Parameters:
  `b` - buffer containing compressed data to decompress and write to the output stream
  `off` - starting offset of the compressed data within `b`
  `len` - number of bytes to decompress from `b`
Throws:
  `IndexOutOfBoundsException` - if `off < 0`, or if `len < 0`, or if `len > b.length - off`
  `IOException` - if an I/O error occurs or this stream is already closed
  `NullPointerException` - if `b` is null
  `ZipException` - if a compression (ZIP) format error occurs
See Also:
  - `FilterOutputStream.write(int)`