Class FramedSnappyCompressorInputStream

java.lang.Object
java.io.InputStream
org.apache.commons.compress.compressors.CompressorInputStream
org.apache.commons.compress.compressors.snappy.FramedSnappyCompressorInputStream
All Implemented Interfaces:
Closeable, 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:
  • Field Details

    • MASK_OFFSET

      static final long MASK_OFFSET
      package private for tests only.
      See Also:
    • STREAM_IDENTIFIER_TYPE

      private static final int STREAM_IDENTIFIER_TYPE
      See Also:
    • COMPRESSED_CHUNK_TYPE

      static final int COMPRESSED_CHUNK_TYPE
      See Also:
    • UNCOMPRESSED_CHUNK_TYPE

      private static final int UNCOMPRESSED_CHUNK_TYPE
      See Also:
    • PADDING_CHUNK_TYPE

      private static final int PADDING_CHUNK_TYPE
      See Also:
    • MIN_UNSKIPPABLE_TYPE

      private static final int MIN_UNSKIPPABLE_TYPE
      See Also:
    • MAX_UNSKIPPABLE_TYPE

      private static final int MAX_UNSKIPPABLE_TYPE
      See Also:
    • MAX_SKIPPABLE_TYPE

      private static final int MAX_SKIPPABLE_TYPE
      See Also:
    • SZ_SIGNATURE

      static final byte[] SZ_SIGNATURE
    • unreadBytes

      private long unreadBytes
    • countingStream

      private final CountingInputStream countingStream
    • inputStream

      private final 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 Details

    • FramedSnappyCompressorInputStream

      public FramedSnappyCompressorInputStream(InputStream in) throws IOException
      Constructs a new input stream that decompresses snappy-framed-compressed data from the specified input stream using the FramedSnappyDialect.STANDARD dialect.
      Parameters:
      in - the InputStream from which to read the compressed data
      Throws:
      IOException - if reading fails
    • FramedSnappyCompressorInputStream

      public FramedSnappyCompressorInputStream(InputStream in, FramedSnappyDialect dialect) throws 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 data
      dialect - the dialect used by the compressed stream
      Throws:
      IOException - if reading fails
    • FramedSnappyCompressorInputStream

      public FramedSnappyCompressorInputStream(InputStream in, int blockSize, FramedSnappyDialect dialect) throws 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 data
      blockSize - the block size to use for the compressed stream
      dialect - the dialect used by the compressed stream
      Throws:
      IOException - if reading fails
      IllegalArgumentException - if blockSize is not bigger than 0
      Since:
      1.14
  • Method Details

    • read

      public int read() throws IOException
      Specified by:
      read in class InputStream
      Throws:
      IOException
    • close

      public void close() throws IOException
      Specified by:
      close in interface AutoCloseable
      Specified by:
      close in interface Closeable
      Overrides:
      close in class InputStream
      Throws:
      IOException
    • read

      public int read(byte[] b, int off, int len) throws IOException
      Overrides:
      read in class InputStream
      Throws:
      IOException
    • available

      public int available() throws IOException
      Overrides:
      available in class InputStream
      Throws:
      IOException
    • getCompressedCount

      public long getCompressedCount()
      Specified by:
      getCompressedCount in interface InputStreamStatistics
      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 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:
      IOException
    • readNextBlock

      private void readNextBlock() throws IOException
      Throws:
      IOException
    • readCrc

      private long readCrc() throws IOException
      Throws:
      IOException
    • unmask

      static long unmask(long x)
    • readSize

      private int readSize() throws IOException
      Throws:
      IOException
    • skipBlock

      private void skipBlock() throws IOException
      Throws:
      IOException
    • readStreamIdentifier

      private void readStreamIdentifier() throws IOException
      Throws:
      IOException
    • readOneByte

      private int readOneByte() throws IOException
      Throws:
      IOException
    • verifyLastChecksumAndReset

      private void verifyLastChecksumAndReset() throws IOException
      Throws:
      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 check
      length - the number of bytes to check
      Returns:
      true if this is a .sz stream, false otherwise