Class FramedSnappyCompressorInputStream
- java.lang.Object
-
- java.io.InputStream
-
- org.apache.commons.compress.compressors.CompressorInputStream
-
- org.apache.commons.compress.compressors.snappy.FramedSnappyCompressorInputStream
-
- All Implemented Interfaces:
java.io.Closeable,java.lang.AutoCloseable,InputStreamStatistics
public class FramedSnappyCompressorInputStream extends CompressorInputStream implements InputStreamStatistics
CompressorInputStream for the framing Snappy format.Based on the "spec" in the version "Last revised: 2013-10-25"
- Since:
- 1.7
- See Also:
- Snappy framing format description
-
-
Field Summary
Fields Modifier and Type Field Description private intblockSizeprivate PureJavaCrc32Cchecksum(package private) static intCOMPRESSED_CHUNK_TYPEprivate CountingInputStreamcountingStreamprivate SnappyCompressorInputStreamcurrentCompressedChunkprivate FramedSnappyDialectdialectThe dialect to expectprivate booleanendReachedprivate longexpectedChecksumprivate java.io.PushbackInputStreaminputStreamThe underlying stream to read compressed data fromprivate booleaninUncompressedChunk(package private) static longMASK_OFFSETpackage private for tests only.private static intMAX_SKIPPABLE_TYPEprivate static intMAX_UNSKIPPABLE_TYPEprivate static intMIN_UNSKIPPABLE_TYPEprivate byte[]oneByteprivate static intPADDING_CHUNK_TYPEprivate static intSTREAM_IDENTIFIER_TYPEprivate ByteUtils.ByteSuppliersupplier(package private) static byte[]SZ_SIGNATUREprivate static intUNCOMPRESSED_CHUNK_TYPEprivate intuncompressedBytesRemainingprivate longunreadBytes
-
Constructor Summary
Constructors Constructor Description FramedSnappyCompressorInputStream(java.io.InputStream in)Constructs a new input stream that decompresses snappy-framed-compressed data from the specified input stream using theFramedSnappyDialect.STANDARDdialect.FramedSnappyCompressorInputStream(java.io.InputStream in, int blockSize, FramedSnappyDialect dialect)Constructs a new input stream that decompresses snappy-framed-compressed data from the specified input stream.FramedSnappyCompressorInputStream(java.io.InputStream in, FramedSnappyDialect dialect)Constructs a new input stream that decompresses snappy-framed-compressed data from the specified input stream.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description intavailable()voidclose()longgetCompressedCount()static booleanmatches(byte[] signature, int length)Checks if the signature matches what is expected for a .sz file.intread()intread(byte[] b, int off, int len)private longreadCrc()private voidreadNextBlock()private intreadOnce(byte[] b, int off, int len)Read from the current chunk into the given array.private intreadOneByte()private intreadSize()private voidreadStreamIdentifier()private voidskipBlock()(package private) static longunmask(long x)private voidverifyLastChecksumAndReset()-
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, 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
-
MASK_OFFSET
static final long MASK_OFFSET
package private for tests only.- See Also:
- Constant Field Values
-
STREAM_IDENTIFIER_TYPE
private static final int STREAM_IDENTIFIER_TYPE
- See Also:
- Constant Field Values
-
COMPRESSED_CHUNK_TYPE
static final int COMPRESSED_CHUNK_TYPE
- See Also:
- Constant Field Values
-
UNCOMPRESSED_CHUNK_TYPE
private static final int UNCOMPRESSED_CHUNK_TYPE
- See Also:
- Constant Field Values
-
PADDING_CHUNK_TYPE
private static final int PADDING_CHUNK_TYPE
- See Also:
- Constant Field Values
-
MIN_UNSKIPPABLE_TYPE
private static final int MIN_UNSKIPPABLE_TYPE
- See Also:
- Constant Field Values
-
MAX_UNSKIPPABLE_TYPE
private static final int MAX_UNSKIPPABLE_TYPE
- See Also:
- Constant Field Values
-
MAX_SKIPPABLE_TYPE
private static final int MAX_SKIPPABLE_TYPE
- See Also:
- Constant Field Values
-
SZ_SIGNATURE
static final byte[] SZ_SIGNATURE
-
unreadBytes
private long unreadBytes
-
countingStream
private final CountingInputStream countingStream
-
inputStream
private final java.io.PushbackInputStream inputStream
The underlying stream to read compressed data from
-
dialect
private final FramedSnappyDialect dialect
The dialect to expect
-
currentCompressedChunk
private SnappyCompressorInputStream currentCompressedChunk
-
oneByte
private final byte[] oneByte
-
endReached
private boolean endReached
-
inUncompressedChunk
private boolean inUncompressedChunk
-
uncompressedBytesRemaining
private int uncompressedBytesRemaining
-
expectedChecksum
private long expectedChecksum
-
blockSize
private final int blockSize
-
checksum
private final PureJavaCrc32C checksum
-
supplier
private final ByteUtils.ByteSupplier supplier
-
-
Constructor Detail
-
FramedSnappyCompressorInputStream
public FramedSnappyCompressorInputStream(java.io.InputStream in) throws java.io.IOExceptionConstructs a new input stream that decompresses snappy-framed-compressed data from the specified input stream using theFramedSnappyDialect.STANDARDdialect.- Parameters:
in- the InputStream from which to read the compressed data- Throws:
java.io.IOException- if reading fails
-
FramedSnappyCompressorInputStream
public FramedSnappyCompressorInputStream(java.io.InputStream in, FramedSnappyDialect dialect) throws java.io.IOExceptionConstructs a new input stream that decompresses snappy-framed-compressed data from the specified input stream.- Parameters:
in- the InputStream from which to read the compressed datadialect- the dialect used by the compressed stream- Throws:
java.io.IOException- if reading fails
-
FramedSnappyCompressorInputStream
public FramedSnappyCompressorInputStream(java.io.InputStream in, int blockSize, FramedSnappyDialect dialect) throws java.io.IOExceptionConstructs a new input stream that decompresses snappy-framed-compressed data from the specified input stream.- Parameters:
in- the InputStream from which to read the compressed datablockSize- the block size to use for the compressed streamdialect- the dialect used by the compressed stream- Throws:
java.io.IOException- if reading failsjava.lang.IllegalArgumentException- if blockSize is not bigger than 0- Since:
- 1.14
-
-
Method Detail
-
read
public int read() throws java.io.IOException- Specified by:
readin classjava.io.InputStream- Throws:
java.io.IOException
-
close
public void close() throws java.io.IOException- Specified by:
closein interfacejava.lang.AutoCloseable- Specified by:
closein interfacejava.io.Closeable- Overrides:
closein classjava.io.InputStream- Throws:
java.io.IOException
-
read
public int read(byte[] b, int off, int len) throws java.io.IOException- Overrides:
readin classjava.io.InputStream- Throws:
java.io.IOException
-
available
public int available() throws java.io.IOException- Overrides:
availablein classjava.io.InputStream- Throws:
java.io.IOException
-
getCompressedCount
public long getCompressedCount()
- Specified by:
getCompressedCountin interfaceInputStreamStatistics- Returns:
- the amount of raw or compressed bytes read by the stream
- Since:
- 1.17
-
readOnce
private int readOnce(byte[] b, int off, int len) throws java.io.IOExceptionRead from the current chunk into the given array.- Returns:
- -1 if there is no current chunk or the number of bytes read from the current chunk (which may be -1 if the end of the chunk is reached).
- Throws:
java.io.IOException
-
readNextBlock
private void readNextBlock() throws java.io.IOException- Throws:
java.io.IOException
-
readCrc
private long readCrc() throws java.io.IOException- Throws:
java.io.IOException
-
unmask
static long unmask(long x)
-
readSize
private int readSize() throws java.io.IOException- Throws:
java.io.IOException
-
skipBlock
private void skipBlock() throws java.io.IOException- Throws:
java.io.IOException
-
readStreamIdentifier
private void readStreamIdentifier() throws java.io.IOException- Throws:
java.io.IOException
-
readOneByte
private int readOneByte() throws java.io.IOException- Throws:
java.io.IOException
-
verifyLastChecksumAndReset
private void verifyLastChecksumAndReset() throws java.io.IOException- Throws:
java.io.IOException
-
matches
public static boolean matches(byte[] signature, int length)Checks if the signature matches what is expected for a .sz file..sz files start with a chunk with tag 0xff and content sNaPpY.
- Parameters:
signature- the bytes to checklength- the number of bytes to check- Returns:
- true if this is a .sz stream, false otherwise
-
-