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 .gz files.

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

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

If you use the constructor GzipCompressorInputStream(in) 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 constructor 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.

See Also:
  • "https://tools.ietf.org/html/rfc1952"
  • Field Details

    • FHCRC

      private static final int FHCRC
      See Also:
    • FEXTRA

      private static final int FEXTRA
      See Also:
    • FNAME

      private static final int FNAME
      See Also:
    • FCOMMENT

      private static final int FCOMMENT
      See Also:
    • FRESERVED

      private static final int FRESERVED
      See Also:
    • countingStream

      private final org.apache.commons.io.input.BoundedInputStream countingStream
    • in

      private final InputStream in
    • decompressConcatenated

      private final boolean decompressConcatenated
    • buf

      private final byte[] buf
    • bufUsed

      private int bufUsed
    • inf

      private Inflater inf
    • crc

      private final CRC32 crc
    • endReached

      private boolean endReached
    • oneByte

      private final byte[] oneByte
    • parameters

      private final GzipParameters parameters
  • 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

      public GzipCompressorInputStream(InputStream inputStream, boolean decompressConcatenated) throws IOException
      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

    • 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
    • readToNull

      private static byte[] readToNull(DataInput inData) throws IOException
      Throws:
      IOException
    • 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()
      Description copied from interface: InputStreamStatistics
      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
    • init

      private boolean init(boolean isFirstMember) throws IOException
      Throws:
      IOException
    • 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