Class AbstractLZ77CompressorInputStream

    • Constructor Summary

      Constructors 
      Constructor Description
      AbstractLZ77CompressorInputStream​(java.io.InputStream is, int windowSize)
      Creates a new LZ77 input stream.
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      int available()
      void close()
      long getCompressedCount()
      Gets the amount of raw or compressed bytes read by the stream.
      int getSize()
      Gets the uncompressed size of the stream
      protected boolean hasMoreDataInBlock()
      Is there still data remaining inside the current block?
      void prefill​(byte[] data)
      Adds some initial data to fill the window with.
      int read()
      protected int readBackReference​(byte[] b, int off, int len)
      Reads data from the current back-reference.
      protected int readLiteral​(byte[] b, int off, int len)
      Reads data from the current literal block.
      protected int readOneByte()
      Reads a single byte from the real input stream and ensures the data is accounted for.
      protected void startBackReference​(int offset, long length)
      Used by subclasses to signal the next block contains a back-reference with the given coordinates.
      protected void startLiteral​(long length)
      Used by subclasses to signal the next block contains the given amount of literal data.
      • Methods inherited from class java.io.InputStream

        mark, markSupported, nullInputStream, read, 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
    • Constructor Detail

      • AbstractLZ77CompressorInputStream

        public AbstractLZ77CompressorInputStream​(java.io.InputStream is,
                                                 int windowSize)
        Creates a new LZ77 input stream.
        Parameters:
        is - An InputStream to read compressed data from
        windowSize - Size of the window kept for back-references, must be bigger than the biggest offset expected.
        Throws:
        java.lang.IllegalArgumentException - if windowSize is not bigger than 0
    • Method Detail

      • available

        public int available()
        Overrides:
        available in class java.io.InputStream
      • 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
      • getSize

        public int getSize()
        Gets the uncompressed size of the stream
        Returns:
        the uncompressed size
      • hasMoreDataInBlock

        protected final boolean hasMoreDataInBlock()
        Is there still data remaining inside the current block?
        Returns:
        true if there is still data remaining inside the current block.
      • prefill

        public void prefill​(byte[] data)
        Adds some initial data to fill the window with.

        This is used if the stream has been cut into blocks and back-references of one block may refer to data of the previous block(s). One such example is the LZ4 frame format using block dependency.

        Parameters:
        data - the data to fill the window with.
        Throws:
        java.lang.IllegalStateException - if the stream has already started to read data
      • read

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

        protected final int readBackReference​(byte[] b,
                                              int off,
                                              int len)
        Reads data from the current back-reference.
        Parameters:
        b - buffer to write data to
        off - offset to start writing to
        len - maximum amount of data to read
        Returns:
        number of bytes read, may be 0. Will never return -1 as EOF-detection is the responsibility of the subclass
        Throws:
        java.lang.NullPointerException - if b is null
        java.lang.IndexOutOfBoundsException - if off is negative, len is negative, or len is greater than b.length - off
      • readLiteral

        protected final int readLiteral​(byte[] b,
                                        int off,
                                        int len)
                                 throws java.io.IOException
        Reads data from the current literal block.
        Parameters:
        b - buffer to write data to
        off - offset to start writing to
        len - maximum amount of data to read
        Returns:
        number of bytes read, may be 0. Will never return -1 as EOF-detection is the responsibility of the subclass
        Throws:
        java.io.IOException - if the underlying stream throws or signals an EOF before the amount of data promised for the block have been read
        java.lang.NullPointerException - if b is null
        java.lang.IndexOutOfBoundsException - if off is negative, len is negative, or len is greater than b.length - off
      • readOneByte

        protected final int readOneByte()
                                 throws java.io.IOException
        Reads a single byte from the real input stream and ensures the data is accounted for.
        Returns:
        the byte read as value between 0 and 255 or -1 if EOF has been reached.
        Throws:
        java.io.IOException - if the underlying stream throws
      • startBackReference

        protected final void startBackReference​(int offset,
                                                long length)
        Used by subclasses to signal the next block contains a back-reference with the given coordinates.
        Parameters:
        offset - the offset of the back-reference
        length - the length of the back-reference
        Throws:
        java.lang.IllegalArgumentException - if offset not bigger than 0 or bigger than the number of bytes available for back-references or if length is negative
      • startLiteral

        protected final void startLiteral​(long length)
        Used by subclasses to signal the next block contains the given amount of literal data.
        Parameters:
        length - the length of the block
        Throws:
        java.lang.IllegalArgumentException - if length is negative