Class LZWInputStream

    • Field Detail

      • oneByte

        private final byte[] oneByte
      • clearCode

        private int clearCode
      • codeSize

        private int codeSize
      • previousCodeFirstChar

        private byte previousCodeFirstChar
      • previousCode

        private int previousCode
      • tableSize

        private int tableSize
      • prefixes

        private int[] prefixes
      • characters

        private byte[] characters
      • outputStack

        private byte[] outputStack
      • outputStackLocation

        private int outputStackLocation
    • Constructor Detail

      • LZWInputStream

        protected LZWInputStream​(java.io.InputStream inputStream,
                                 java.nio.ByteOrder byteOrder)
    • Method Detail

      • 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()
                 throws java.io.IOException
        Specified by:
        read 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
      • decompressNextSymbol

        protected abstract int decompressNextSymbol()
                                             throws java.io.IOException
        Read the next code and expand it.
        Returns:
        the expanded next code, negative on EOF
        Throws:
        java.io.IOException - on error
      • addEntry

        protected abstract int addEntry​(int previousCode,
                                        byte character)
                                 throws java.io.IOException
        Add a new entry to the dictionary.
        Parameters:
        previousCode - the previous code
        character - the next character to append
        Returns:
        the new code
        Throws:
        java.io.IOException - on error
      • setClearCode

        protected void setClearCode​(int codeSize)
        Sets the clear code based on the code size.
        Parameters:
        codeSize - code size
      • initializeTables

        protected void initializeTables​(int maxCodeSize,
                                        int memoryLimitInKb)
                                 throws MemoryLimitException
        Initializes the arrays based on the maximum code size. First checks that the estimated memory usage is below memoryLimitInKb
        Parameters:
        maxCodeSize - maximum code size
        memoryLimitInKb - maximum allowed estimated memory usage in Kb
        Throws:
        MemoryLimitException - if estimated memory usage is greater than memoryLimitInKb
        java.lang.IllegalArgumentException - if maxCodeSize is not bigger than 0
      • initializeTables

        protected void initializeTables​(int maxCodeSize)
        Initializes the arrays based on the maximum code size.
        Parameters:
        maxCodeSize - maximum code size
        Throws:
        java.lang.IllegalArgumentException - if maxCodeSize is not bigger than 0
      • readNextCode

        protected int readNextCode()
                            throws java.io.IOException
        Reads the next code from the stream.
        Returns:
        the next code
        Throws:
        java.io.IOException - on error
      • addEntry

        protected int addEntry​(int previousCode,
                               byte character,
                               int maxTableSize)
        Adds a new entry if the maximum table size hasn't been exceeded and returns the new index.
        Parameters:
        previousCode - the previous code
        character - the character to append
        maxTableSize - the maximum table size
        Returns:
        the new code or -1 if maxTableSize has been reached already
      • addRepeatOfPreviousCode

        protected int addRepeatOfPreviousCode()
                                       throws java.io.IOException
        Add entry for repeat of previousCode we haven't added, yet.
        Returns:
        new code for a repeat of the previous code or -1 if maxTableSize has been reached already
        Throws:
        java.io.IOException - on error
      • expandCodeToOutputStack

        protected int expandCodeToOutputStack​(int code,
                                              boolean addedUnfinishedEntry)
                                       throws java.io.IOException
        Expands the entry with index code to the output stack and may create a new entry
        Parameters:
        code - the code
        addedUnfinishedEntry - whether unfinished entries have been added
        Returns:
        the new location of the output stack
        Throws:
        java.io.IOException - on error
      • readFromStack

        private int readFromStack​(byte[] b,
                                  int off,
                                  int len)
      • getCodeSize

        protected int getCodeSize()
      • resetCodeSize

        protected void resetCodeSize()
      • setCodeSize

        protected void setCodeSize​(int cs)
      • incrementCodeSize

        protected void incrementCodeSize()
      • resetPreviousCode

        protected void resetPreviousCode()
      • getPrefix

        protected int getPrefix​(int offset)
      • setPrefix

        protected void setPrefix​(int offset,
                                 int value)
      • getPrefixesLength

        protected int getPrefixesLength()
      • getClearCode

        protected int getClearCode()
      • getTableSize

        protected int getTableSize()
      • setTableSize

        protected void setTableSize​(int newSize)