Class GzipCompressorInputStream
- java.lang.Object
-
- java.io.InputStream
-
- org.apache.commons.compress.compressors.CompressorInputStream
-
- org.apache.commons.compress.compressors.gzip.GzipCompressorInputStream
-
- All Implemented Interfaces:
java.io.Closeable
,java.lang.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.
GZIPInputStream
doesn't decompress concatenated .gz files: it stops after the first member and silently ignores the rest. It doesn't leave the read position to point to the beginning of the next member, which makes it difficult workaround the lack of concatenation support.Instead of using
GZIPInputStream
, this class has its own .gz container format decoder. The actual decompression is done withInflater
.If you use the constructor
GzipCompressorInputStream(in)
orGzipCompressorInputStream(in, false)
with someInputStream
in
thenread()
will return -1 as soon as the first internal member has been read completely. The streamin
will be positioned at the start of the second gzip member if there is one.If you use the constructor
GzipCompressorInputStream(in, true)
with someInputStream
in
thenread()
will return -1 once the streamin
has been exhausted. The data read from a stream constructed this way will consist of the concatenated data of all gzip members contained insidein
.- See Also:
- "https://tools.ietf.org/html/rfc1952"
-
-
Field Summary
Fields Modifier and Type Field Description private byte[]
buf
private int
bufUsed
private CountingInputStream
countingStream
private java.util.zip.CRC32
crc
private boolean
decompressConcatenated
private boolean
endReached
private static int
FCOMMENT
private static int
FEXTRA
private static int
FHCRC
private static int
FNAME
private static int
FRESERVED
private java.io.InputStream
in
private java.util.zip.Inflater
inf
private byte[]
oneByte
private GzipParameters
parameters
-
Constructor Summary
Constructors Constructor Description GzipCompressorInputStream(java.io.InputStream inputStream)
Constructs a new input stream that decompresses gzip-compressed data from the specified input stream.GzipCompressorInputStream(java.io.InputStream inputStream, boolean decompressConcatenated)
Constructs a new input stream that decompresses gzip-compressed data from the specified input stream.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description void
close()
Closes the input stream (unless it is System.in).long
getCompressedCount()
GzipParameters
getMetaData()
Provides the stream's meta data - may change with each stream when decompressing concatenated streams.private boolean
init(boolean isFirstMember)
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)
private static byte[]
readToNull(java.io.DataInput inData)
-
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, nullInputStream, read, readAllBytes, readNBytes, readNBytes, reset, skip, transferTo
-
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
-
-
-
-
Field Detail
-
FHCRC
private static final int FHCRC
- See Also:
- Constant Field Values
-
FEXTRA
private static final int FEXTRA
- See Also:
- Constant Field Values
-
FNAME
private static final int FNAME
- See Also:
- Constant Field Values
-
FCOMMENT
private static final int FCOMMENT
- See Also:
- Constant Field Values
-
FRESERVED
private static final int FRESERVED
- See Also:
- Constant Field Values
-
countingStream
private final CountingInputStream countingStream
-
in
private final java.io.InputStream in
-
decompressConcatenated
private final boolean decompressConcatenated
-
buf
private final byte[] buf
-
bufUsed
private int bufUsed
-
inf
private java.util.zip.Inflater inf
-
crc
private final java.util.zip.CRC32 crc
-
endReached
private boolean endReached
-
oneByte
private final byte[] oneByte
-
parameters
private final GzipParameters parameters
-
-
Constructor Detail
-
GzipCompressorInputStream
public GzipCompressorInputStream(java.io.InputStream inputStream) throws java.io.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:
java.io.IOException
- if the stream could not be created
-
GzipCompressorInputStream
public GzipCompressorInputStream(java.io.InputStream inputStream, boolean decompressConcatenated) throws java.io.IOException
Constructs a new input stream that decompresses gzip-compressed data from the specified input stream.If
decompressConcatenated
isfalse
: This decompressor might read more input than it will actually use. IfinputStream
supportsmark
andreset
, then the input position will be adjusted so that it is right after the last byte of the compressed stream. Ifmark
isn't supported, the input position will be undefined.- Parameters:
inputStream
- the InputStream from which this object should be created ofdecompressConcatenated
- if true, decompress until the end of the input; if false, stop after the first .gz member- Throws:
java.io.IOException
- if the stream could not be created
-
-
Method Detail
-
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 java.io.IOException
- Throws:
java.io.IOException
-
readToNull
private static byte[] readToNull(java.io.DataInput inData) throws java.io.IOException
- Throws:
java.io.IOException
-
read
public int read() throws java.io.IOException
- Specified by:
read
in classjava.io.InputStream
- Throws:
java.io.IOException
-
read
public int read(byte[] b, int off, int len) throws java.io.IOException
- Overrides:
read
in classjava.io.InputStream
- Throws:
java.io.IOException
- Since:
- 1.1
-
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 checklength
- the number of bytes to check- Returns:
- true if this is a .gz stream, false otherwise
- Since:
- 1.1
-
close
public void close() throws java.io.IOException
Closes the input stream (unless it is System.in).- Specified by:
close
in interfacejava.lang.AutoCloseable
- Specified by:
close
in interfacejava.io.Closeable
- Overrides:
close
in classjava.io.InputStream
- Throws:
java.io.IOException
- Since:
- 1.2
-
getCompressedCount
public long getCompressedCount()
- Specified by:
getCompressedCount
in interfaceInputStreamStatistics
- Returns:
- the amount of raw or compressed bytes read by the stream
- Since:
- 1.17
-
-