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 int
blockSize
private PureJavaCrc32C
checksum
(package private) static int
COMPRESSED_CHUNK_TYPE
private CountingInputStream
countingStream
private SnappyCompressorInputStream
currentCompressedChunk
private FramedSnappyDialect
dialect
The dialect to expectprivate boolean
endReached
private long
expectedChecksum
private java.io.PushbackInputStream
in
The underlying stream to read compressed data fromprivate boolean
inUncompressedChunk
(package private) static long
MASK_OFFSET
package private for tests only.private static int
MAX_SKIPPABLE_TYPE
private static int
MAX_UNSKIPPABLE_TYPE
private static int
MIN_UNSKIPPABLE_TYPE
private byte[]
oneByte
private static int
PADDING_CHUNK_TYPE
private static int
STREAM_IDENTIFIER_TYPE
private ByteUtils.ByteSupplier
supplier
(package private) static byte[]
SZ_SIGNATURE
private static int
UNCOMPRESSED_CHUNK_TYPE
private int
uncompressedBytesRemaining
private long
unreadBytes
-
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.STANDARD
dialect.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 int
available()
void
close()
long
getCompressedCount()
static boolean
matches(byte[] signature, int length)
Checks if the signature matches what is expected for a .sz file.int
read()
int
read(byte[] b, int off, int len)
private long
readCrc()
private void
readNextBlock()
private int
readOnce(byte[] b, int off, int len)
Read from the current chunk into the given array.private int
readOneByte()
private int
readSize()
private void
readStreamIdentifier()
private void
skipBlock()
(package private) static long
unmask(long x)
private void
verifyLastChecksumAndReset()
-
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
-
in
private final java.io.PushbackInputStream in
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.IOException
Constructs a new input stream that decompresses snappy-framed-compressed data from the specified input stream using theFramedSnappyDialect.STANDARD
dialect.- 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.IOException
Constructs 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.IOException
Constructs 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:
read
in classjava.io.InputStream
- Throws:
java.io.IOException
-
close
public void close() throws java.io.IOException
- Specified by:
close
in interfacejava.lang.AutoCloseable
- Specified by:
close
in interfacejava.io.Closeable
- Overrides:
close
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
-
available
public int available() throws java.io.IOException
- Overrides:
available
in classjava.io.InputStream
- Throws:
java.io.IOException
-
getCompressedCount
public long getCompressedCount()
- Specified by:
getCompressedCount
in 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.IOException
Read 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
-
-