Class FramedLZ4CompressorInputStream

    • Field Detail

      • LZ4_SIGNATURE

        static final byte[] LZ4_SIGNATURE
      • SKIPPABLE_FRAME_TRAILER

        private static final byte[] SKIPPABLE_FRAME_TRAILER
      • SKIPPABLE_FRAME_PREFIX_BYTE_MASK

        private static final byte SKIPPABLE_FRAME_PREFIX_BYTE_MASK
        See Also:
        Constant Field Values
      • oneByte

        private final byte[] oneByte
      • decompressConcatenated

        private final boolean decompressConcatenated
      • expectBlockChecksum

        private boolean expectBlockChecksum
      • expectBlockDependency

        private boolean expectBlockDependency
      • expectContentSize

        private boolean expectContentSize
      • expectContentChecksum

        private boolean expectContentChecksum
      • currentBlock

        private java.io.InputStream currentBlock
      • endReached

        private boolean endReached
      • inUncompressed

        private boolean inUncompressed
      • contentHash

        private final XXHash32 contentHash
      • blockHash

        private final XXHash32 blockHash
      • blockDependencyBuffer

        private byte[] blockDependencyBuffer
    • Constructor Detail

      • FramedLZ4CompressorInputStream

        public FramedLZ4CompressorInputStream​(java.io.InputStream in)
                                       throws java.io.IOException
        Creates a new input stream that decompresses streams compressed using the LZ4 frame format and stops after decompressing the first frame.
        Parameters:
        in - the InputStream from which to read the compressed data
        Throws:
        java.io.IOException - if reading fails
      • FramedLZ4CompressorInputStream

        public FramedLZ4CompressorInputStream​(java.io.InputStream in,
                                              boolean decompressConcatenated)
                                       throws java.io.IOException
        Creates a new input stream that decompresses streams compressed using the LZ4 frame format.
        Parameters:
        in - the InputStream from which to read the compressed data
        decompressConcatenated - if true, decompress until the end of the input; if false, stop after the first LZ4 frame and leave the input position to point to the next byte after the frame stream
        Throws:
        java.io.IOException - if reading fails
    • Method Detail

      • read

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

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

        public int read​(byte[] b,
                        int off,
                        int len)
                 throws java.io.IOException
        Overrides:
        read in class java.io.InputStream
        Throws:
        java.io.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
      • init

        private void init​(boolean firstFrame)
                   throws java.io.IOException
        Throws:
        java.io.IOException
      • readSignature

        private boolean readSignature​(boolean firstFrame)
                               throws java.io.IOException
        Throws:
        java.io.IOException
      • readFrameDescriptor

        private void readFrameDescriptor()
                                  throws java.io.IOException
        Throws:
        java.io.IOException
      • nextBlock

        private void nextBlock()
                        throws java.io.IOException
        Throws:
        java.io.IOException
      • maybeFinishCurrentBlock

        private void maybeFinishCurrentBlock()
                                      throws java.io.IOException
        Throws:
        java.io.IOException
      • verifyContentChecksum

        private void verifyContentChecksum()
                                    throws java.io.IOException
        Throws:
        java.io.IOException
      • verifyChecksum

        private void verifyChecksum​(XXHash32 hash,
                                    java.lang.String kind)
                             throws java.io.IOException
        Throws:
        java.io.IOException
      • readOneByte

        private int readOneByte()
                         throws java.io.IOException
        Throws:
        java.io.IOException
      • readOnce

        private int readOnce​(byte[] b,
                             int off,
                             int len)
                      throws java.io.IOException
        Throws:
        java.io.IOException
      • isSkippableFrameSignature

        private static boolean isSkippableFrameSignature​(byte[] b)
      • skipSkippableFrame

        private int skipSkippableFrame​(byte[] b)
                                throws java.io.IOException
        Skips over the contents of a skippable frame as well as skippable frames following it.

        It then tries to read four more bytes which are supposed to hold an LZ4 signature and returns the number of bytes read while storing the bytes in the given array.

        Throws:
        java.io.IOException
      • appendToBlockDependencyBuffer

        private void appendToBlockDependencyBuffer​(byte[] b,
                                                   int off,
                                                   int len)
      • matches

        public static boolean matches​(byte[] signature,
                                      int length)
        Checks if the signature matches what is expected for a .lz4 file.

        .lz4 files start with a four byte signature.

        Parameters:
        signature - the bytes to check
        length - the number of bytes to check
        Returns:
        true if this is a .sz stream, false otherwise