Class GzipCompressorInputStream
- All Implemented Interfaces:
Closeable,AutoCloseable,InputStreamStatistics
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:
-
Field Summary
FieldsModifier and TypeFieldDescriptionprivate final byte[]private intprivate final org.apache.commons.io.input.BoundedInputStreamprivate final CRC32private final booleanprivate booleanprivate static final intprivate static final intprivate static final intprivate static final intprivate static final intprivate final InputStreamprivate Inflaterprivate final byte[]private final GzipParameters -
Constructor Summary
ConstructorsConstructorDescriptionGzipCompressorInputStream(InputStream inputStream) Constructs a new input stream that decompresses gzip-compressed data from the specified input stream.GzipCompressorInputStream(InputStream inputStream, boolean decompressConcatenated) Constructs a new input stream that decompresses gzip-compressed data from the specified input stream. -
Method Summary
Modifier and TypeMethodDescriptionvoidclose()Closes the input stream (unless it is System.in).longGets the amount of raw or compressed bytes read by the stream.Provides the stream's meta data - may change with each stream when decompressing concatenated streams.private booleaninit(boolean isFirstMember) static booleanmatches(byte[] signature, int length) Checks if the signature matches what is expected for a .gz file.intread()intread(byte[] b, int off, int len) private static byte[]readToNull(DataInput inData) Methods inherited from class org.apache.commons.compress.compressors.CompressorInputStream
count, count, getBytesRead, getCount, getUncompressedCount, pushedBackBytesMethods inherited from class java.io.InputStream
available, mark, markSupported, read, reset, skipMethods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface org.apache.commons.compress.utils.InputStreamStatistics
getUncompressedCount
-
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
-
decompressConcatenated
private final boolean decompressConcatenated -
buf
private final byte[] buf -
bufUsed
private int bufUsed -
inf
-
crc
-
endReached
private boolean endReached -
oneByte
private final byte[] oneByte -
parameters
-
-
Constructor Details
-
GzipCompressorInputStream
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
decompressConcatenatedisfalse: This decompressor might read more input than it will actually use. IfinputStreamsupportsmarkandreset, then the input position will be adjusted so that it is right after the last byte of the compressed stream. Ifmarkisn'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:
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 checklength- the number of bytes to check- Returns:
- true if this is a .gz stream, false otherwise
- Since:
- 1.1
-
readToNull
- Throws:
IOException
-
close
Closes the input stream (unless it is System.in).- Specified by:
closein interfaceAutoCloseable- Specified by:
closein interfaceCloseable- Overrides:
closein classInputStream- Throws:
IOException- Since:
- 1.2
-
getCompressedCount
public long getCompressedCount()Description copied from interface:InputStreamStatisticsGets the amount of raw or compressed bytes read by the stream.- Specified by:
getCompressedCountin interfaceInputStreamStatistics- Returns:
- the amount of raw or compressed bytes read by the stream.
- Since:
- 1.17
-
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
- Throws:
IOException
-
read
- Specified by:
readin classInputStream- Throws:
IOException
-
read
- Overrides:
readin classInputStream- Throws:
IOException- Since:
- 1.1
-