Package org.apache.commons.compress.compressors.gzip

# Class GzipCompressorInputStream

java.lang.Object
java.io.InputStream
org.apache.commons.compress.compressors.CompressorInputStream
org.apache.commons.compress.compressors.gzip.GzipCompressorInputStream

All Implemented Interfaces:
  `Closeable`, `AutoCloseable`, `InputStreamStatistics`

public class GzipCompressorInputStream extends CompressorInputStream implements InputStreamStatistics
Input stream that decompresses GZIP (.gz) files.

This supports decompressing concatenated GZIP files which is important when decompressing standalone GZIP files.

Instead of using `java.util.zip.GZIPInputStream`, this class has its own GZIP member decoder. Internally, decompression is done using `Inflater`.

If you use the constructor `GzipCompressorInputStream(in)`, `Builder.setDecompressConcatenated(false)`, or `GzipCompressorInputStream(in, false)`, then `read()` will return -1 as soon as the first encoded GZIP member has been completely read. In this case, if the underlying input stream supports `mark()` and `reset()`, then it will be left positioned just after the end of the encoded GZIP member; otherwise, some indeterminate number of extra bytes following the encoded GZIP member will have been consumed and discarded.

If you use the `Builder.setDecompressConcatenated(true)` or `GzipCompressorInputStream(in, true)` then `read()` will return -1 only after the entire input stream has been exhausted; any bytes that follow an encoded GZIP member must constitute a new encoded GZIP member, otherwise an `IOException` is thrown. The data read from a stream constructed this way will consist of the concatenated data of all of the encoded GZIP members in order.

To build an instance, use `GzipCompressorInputStream.Builder`.

See Also:
  - `GzipCompressorInputStream.Builder`
  - RFC 1952 GZIP File Format Specification

- ## Nested Class Summary

  Nested Classes
  Modifier and Type
  Class
  Description
  `static class`
  `GzipCompressorInputStream.Builder`
  Builds a new `GzipCompressorInputStream`.

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `GzipCompressorInputStream(InputStream inputStream)`
  Constructs a new input stream that decompresses gzip-compressed data from the specified input stream.
  `GzipCompressorInputStream(InputStream inputStream, boolean decompressConcatenated)`
  Deprecated.
  Use `GzipCompressorInputStream.Builder.get()`.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `static GzipCompressorInputStream.Builder`
  `builder()`
  Constructs a new builder of `GzipCompressorInputStream`.
  `void`
  `close()`
  Closes the input stream (unless it is System.in).
  `long`
  `getCompressedCount()`
  Gets the amount of raw or compressed bytes read by the stream.
  `GzipParameters`
  `getMetaData()`
  Provides the stream's meta data - may change with each stream when decompressing concatenated streams.
  `static boolean`
  `matches(byte[] signature, int length)`
  Checks if the signature matches what is expected for a .gz file.
  `int`
  `read()`
  `int`
  `read(byte[] b, int off, int len)`

  ### Methods inherited from class org.apache.commons.compress.compressors.CompressorInputStream

  `count, count, getBytesRead, getCount, getUncompressedCount, pushedBackBytes`

  ### Methods inherited from class java.io.InputStream

  `available, mark, markSupported, read, reset, skip`

  ### Methods inherited from class java.lang.Object

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

  ### Methods inherited from interface org.apache.commons.compress.utils.InputStreamStatistics

  `getUncompressedCount`

- ## Constructor Details

  - ### GzipCompressorInputStream

    public GzipCompressorInputStream(InputStream inputStream) throws IOException
    Constructs a new input stream that decompresses gzip-compressed data from the specified input stream.

    This is equivalent to `GzipCompressorInputStream(inputStream, false)` and thus will not decompress concatenated .gz files.

    Parameters:
      `inputStream` - the InputStream from which this object should be created of
    Throws:
      `IOException` - if the stream could not be created

  - ### GzipCompressorInputStream

    @Deprecated public GzipCompressorInputStream(InputStream inputStream, boolean decompressConcatenated) throws IOException
    Deprecated.
    Use `GzipCompressorInputStream.Builder.get()`.
    Constructs a new input stream that decompresses gzip-compressed data from the specified input stream.

    If `decompressConcatenated` is `false`: This decompressor might read more input than it will actually use. If `inputStream` supports `mark` and `reset`, then the input position will be adjusted so that it is right after the last byte of the compressed stream. If `mark` isn't supported, the input position will be undefined.

    Parameters:
      `inputStream` - the InputStream from which this object should be created of
      `decompressConcatenated` - if true, decompress until the end of the input; if false, stop after the first .gz member
    Throws:
      `IOException` - if the stream could not be created

- ## Method Details

  - ### builder

    public static GzipCompressorInputStream.Builder builder()
    Constructs a new builder of `GzipCompressorInputStream`.
    Returns:
      a new builder of `GzipCompressorInputStream`.
    Since:
      1.28.0

  - ### matches

    public static boolean matches(byte[] signature, int length)
    Checks if the signature matches what is expected for a .gz file.
    Parameters:
      `signature` - the bytes to check
      `length` - the number of bytes to check
    Returns:
      true if this is a .gz stream, false otherwise
    Since:
      1.1

  - ### close

    public void close() throws IOException
    Closes the input stream (unless it is System.in).
    Specified by:
      `close` in interface `AutoCloseable`
    Specified by:
      `close` in interface `Closeable`
    Overrides:
      `close` in class `InputStream`
    Throws:
      `IOException`
    Since:
      1.2

  - ### getCompressedCount

    public long getCompressedCount()
    Gets the amount of raw or compressed bytes read by the stream..
    Specified by:
      `getCompressedCount` in interface `InputStreamStatistics`
    Returns:
      the amount of raw or compressed bytes read by the stream.
    Since:
      1.17

  - ### getMetaData

    public GzipParameters getMetaData()
    Provides the stream's meta data - may change with each stream when decompressing concatenated streams.
    Returns:
      the stream's meta data
    Since:
      1.8

  - ### read

    public int read() throws IOException
    Specified by:
      `read` in class `InputStream`
    Throws:
      `IOException`

  - ### read

    public int read(byte[] b, int off, int len) throws IOException
    Overrides:
      `read` in class `InputStream`
    Throws:
      `IOException`
    Since:
      1.1