Module java.base
Package java.util.zip

# Class InflaterInputStream

java.lang.Object
java.io.InputStream
java.io.FilterInputStream
java.util.zip.InflaterInputStream

All Implemented Interfaces:
  `Closeable`, `AutoCloseable`

Direct Known Subclasses:
  `GZIPInputStream`, `ZipInputStream`

public class InflaterInputStream extends FilterInputStream
This class implements a stream filter for uncompressing data in the "deflate" compression format. It is also used as the basis for other decompression filters, such as GZIPInputStream.

Since:
  1.1
See Also:
  - `Inflater`

- ## Field Summary

  Fields
  Modifier and Type
  Field
  Description
  `protected byte[]`
  `buf`
  Input buffer for decompression.
  `protected Inflater`
  `inf`
  Decompressor for this stream.
  `protected int`
  `len`
  The total number of bytes read into the input buffer.

  ### Fields declared in class java.io.FilterInputStream

  `in`

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `InflaterInputStream(InputStream in)`
  Creates a new input stream with a default decompressor and buffer size.
  `InflaterInputStream(InputStream in, Inflater inf)`
  Creates a new input stream with the specified decompressor and a default buffer size.
  `InflaterInputStream(InputStream in, Inflater inf, int size)`
  Creates a new input stream with the specified decompressor and buffer size.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `int`
  `available()`
  Returns 0 after EOF has been reached, otherwise always return 1.
  `void`
  `close()`
  Closes this input stream and releases any system resources associated with the stream.
  `protected void`
  `fill()`
  Fills input buffer with more data to decompress.
  `void`
  `mark(int readlimit)`
  Marks the current position in this input stream.
  `boolean`
  `markSupported()`
  Tests if this input stream supports the `mark` and `reset` methods.
  `int`
  `read()`
  Reads a byte of uncompressed data.
  `int`
  `read(byte[] b, int off, int len)`
  Reads uncompressed data into an array of bytes, returning the number of inflated bytes.
  `void`
  `reset()`
  Repositions this stream to the position at the time the `mark` method was last called on this input stream.
  `long`
  `skip(long n)`
  Skips specified number of bytes of uncompressed data.

  ### Methods declared in class java.io.FilterInputStream

  `read`

  ### Methods declared in class java.io.InputStream

  `nullInputStream, readAllBytes, readNBytes, readNBytes, skipNBytes, transferTo`

  ### Methods declared in class java.lang.Object

  `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- ## Field Details

  - ### inf

    protected Inflater inf
    Decompressor for this stream.

  - ### buf

    protected byte[] buf
    Input buffer for decompression.

  - ### len

    protected int len
    The total number of bytes read into the input buffer.

- ## Constructor Details

  - ### InflaterInputStream

    public InflaterInputStream(InputStream in, Inflater inf, int size)
    Creates a new input stream with the specified decompressor and buffer size.
    Parameters:
      `in` - the input stream
      `inf` - the decompressor ("inflater")
      `size` - the input buffer size
    Throws:
      `IllegalArgumentException` - if `size <= 0`

  - ### InflaterInputStream

    public InflaterInputStream(InputStream in, Inflater inf)
    Creates a new input stream with the specified decompressor and a default buffer size.
    Parameters:
      `in` - the input stream
      `inf` - the decompressor ("inflater")

  - ### InflaterInputStream

    public InflaterInputStream(InputStream in)
    Creates a new input stream with a default decompressor and buffer size.
    Parameters:
      `in` - the input stream

- ## Method Details

  - ### read

    public int read() throws IOException
    Reads a byte of uncompressed data. This method will block until enough input is available for decompression.
    Overrides:
      `read` in class `FilterInputStream`
    Returns:
      the byte read, or -1 if end of compressed input is reached
    Throws:
      `IOException` - if an I/O error has occurred
    See Also:
      - `FilterInputStream.in`

  - ### read

    public int read(byte[] b, int off, int len) throws IOException
    Reads uncompressed data into an array of bytes, returning the number of inflated bytes. If `len` is not zero, the method will block until some input can be decompressed; otherwise, no bytes are read and `0` is returned.

    If this method returns a nonzero integer n then `buf[off]` through `buf[off+`n`-1]` contain the uncompressed data. The content of elements `buf[off+`n`]` through `buf[off+`len`-1]` is undefined, contrary to the specification of the `InputStream` superclass, so an implementation is free to modify these elements during the inflate operation. If this method returns `-1` or throws an exception then the content of `buf[off]` through `buf[off+`len`-1]` is undefined.

    Overrides:
      `read` in class `FilterInputStream`
    Parameters:
      `b` - the buffer into which the data is read
      `off` - the start offset in the destination array `b`
      `len` - the maximum number of bytes read
    Returns:
      the actual number of bytes inflated, or -1 if the end of the compressed input is reached or a preset dictionary is needed
    Throws:
      `NullPointerException` - If `b` is `null`.
      `IndexOutOfBoundsException` - If `off` is negative, `len` is negative, or `len` is greater than `b.length - off`
      `ZipException` - if a ZIP format error has occurred
      `IOException` - if an I/O error has occurred
    See Also:
      - `FilterInputStream.in`

  - ### available

    public int available() throws IOException
    Returns 0 after EOF has been reached, otherwise always return 1.

    Programs should not count on this method to return the actual number of bytes that could be read without blocking.

    Overrides:
      `available` in class `FilterInputStream`
    Returns:
      1 before EOF and 0 after EOF.
    Throws:
      `IOException` - if an I/O error occurs.

  - ### skip

    public long skip(long n) throws IOException
    Skips specified number of bytes of uncompressed data.
    Overrides:
      `skip` in class `FilterInputStream`
    Parameters:
      `n` - the number of bytes to skip
    Returns:
      the actual number of bytes skipped.
    Throws:
      `IOException` - if an I/O error has occurred
      `IllegalArgumentException` - if `n < 0`
    See Also:
      - `InputStream.skipNBytes(long)`

  - ### close

    public void close() throws IOException
    Closes this input stream and releases any system resources associated with the stream.
    Specified by:
      `close` in interface `AutoCloseable`
    Specified by:
      `close` in interface `Closeable`
    Overrides:
      `close` in class `FilterInputStream`
    Throws:
      `IOException` - if an I/O error has occurred
    See Also:
      - `FilterInputStream.in`

  - ### fill

    protected void fill() throws IOException
    Fills input buffer with more data to decompress.
    Implementation Requirements:
      This method will read up to `buf`.length bytes into the input buffer, `buf`, starting at element `0`. The `len` field will be set to the number of bytes read.
    Throws:
      `IOException` - if an I/O error has occurred
      `EOFException` - if the end of input stream has been reached unexpectedly

  - ### markSupported

    public boolean markSupported()
    Tests if this input stream supports the `mark` and `reset` methods. The `markSupported` method of `InflaterInputStream` returns `false`.
    Overrides:
      `markSupported` in class `FilterInputStream`
    Returns:
      a `boolean` indicating if this stream type supports the `mark` and `reset` methods.
    See Also:
      - `InputStream.mark(int)`
      - `InputStream.reset()`

  - ### mark

    public void mark(int readlimit)
    Marks the current position in this input stream.
    Overrides:
      `mark` in class `FilterInputStream`
    Implementation Requirements:
      The `mark` method of `InflaterInputStream` does nothing.
    Parameters:
      `readlimit` - the maximum limit of bytes that can be read before the mark position becomes invalid.
    See Also:
      - `InputStream.reset()`

  - ### reset

    public void reset() throws IOException
    Repositions this stream to the position at the time the `mark` method was last called on this input stream.
    Overrides:
      `reset` in class `FilterInputStream`
    Implementation Requirements:
      The method `reset` for class `InflaterInputStream` does nothing except throw an `IOException`.
    Throws:
      `IOException` - if this method is invoked.
    See Also:
      - `InputStream.mark(int)`
      - `IOException`