Class SnappyCompressorInputStream
java.lang.Object
java.io.InputStream
org.apache.commons.compress.compressors.CompressorInputStream
org.apache.commons.compress.compressors.lz77support.AbstractLZ77CompressorInputStream
org.apache.commons.compress.compressors.snappy.SnappyCompressorInputStream
- All Implemented Interfaces:
Closeable
,AutoCloseable
,InputStreamStatistics
CompressorInputStream for the raw Snappy format.
This implementation uses an internal buffer in order to handle the back-references that are at the heart of the LZ77 algorithm. The size of the buffer must be at least as big as the biggest offset used in the compressed stream. The current version of the Snappy algorithm as defined by Google works on 32k blocks and doesn't contain offsets bigger than 32k which is the default block size used by this class.
- Since:
- 1.7
- See Also:
-
Nested Class Summary
Nested Classes -
Field Summary
FieldsModifier and TypeFieldDescriptionstatic final int
Default block sizeprivate boolean
private final int
The size of the uncompressed dataCurrent state of the streamprivate static final int
Mask used to determine the type of "tag" is being processedprivate int
Number of uncompressed bytes still to be read.Fields inherited from class org.apache.commons.compress.compressors.lz77support.AbstractLZ77CompressorInputStream
supplier
-
Constructor Summary
ConstructorsConstructorDescriptionConstructor using the default buffer size of 32k.SnappyCompressorInputStream
(InputStream is, int blockSize) Constructor using a configurable buffer size. -
Method Summary
Modifier and TypeMethodDescriptionprivate void
fill()
Try to fill the buffer with the next block of data.int
getSize()
Get the uncompressed size of the streamint
read
(byte[] b, int off, int len) private int
readLiteralLength
(int b) private long
readSize()
The stream starts with the uncompressed length (up to a maximum of 2^32 - 1), stored as a little-endian varint.Methods inherited from class org.apache.commons.compress.compressors.lz77support.AbstractLZ77CompressorInputStream
available, close, getCompressedCount, hasMoreDataInBlock, prefill, read, readBackReference, readLiteral, readOneByte, startBackReference, startLiteral
Methods inherited from class org.apache.commons.compress.compressors.CompressorInputStream
count, count, getBytesRead, getCount, getUncompressedCount, pushedBackBytes
Methods inherited from class java.io.InputStream
mark, markSupported, read, readAllBytes, 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 Details
-
TAG_MASK
private static final int TAG_MASKMask used to determine the type of "tag" is being processed- See Also:
-
DEFAULT_BLOCK_SIZE
public static final int DEFAULT_BLOCK_SIZEDefault block size- See Also:
-
size
private final int sizeThe size of the uncompressed data -
uncompressedBytesRemaining
private int uncompressedBytesRemainingNumber of uncompressed bytes still to be read. -
state
Current state of the stream -
endReached
private boolean endReached
-
-
Constructor Details
-
SnappyCompressorInputStream
Constructor using the default buffer size of 32k.- Parameters:
is
- An InputStream to read compressed data from- Throws:
IOException
- if reading fails
-
SnappyCompressorInputStream
Constructor using a configurable buffer size.- Parameters:
is
- An InputStream to read compressed data fromblockSize
- The block size used in compression- Throws:
IOException
- if reading failsIllegalArgumentException
- if blockSize is not bigger than 0
-
-
Method Details
-
read
- Overrides:
read
in classInputStream
- Throws:
IOException
-
fill
Try to fill the buffer with the next block of data.- Throws:
IOException
-
readLiteralLength
- Throws:
IOException
-
readSize
The stream starts with the uncompressed length (up to a maximum of 2^32 - 1), stored as a little-endian varint. Varints consist of a series of bytes, where the lower 7 bits are data and the upper bit is set iff there are more bytes to be read. In other words, an uncompressed length of 64 would be stored as 0x40, and an uncompressed length of 2097150 (0x1FFFFE) would be stored as 0xFE 0xFF 0x7F.- Returns:
- The size of the uncompressed data
- Throws:
IOException
- Could not read a byte
-
getSize
public int getSize()Get the uncompressed size of the stream- Overrides:
getSize
in classAbstractLZ77CompressorInputStream
- Returns:
- the uncompressed size
-