Class LZWInputStream

    • 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
      • 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
      • getPrefix

        protected int getPrefix​(int offset)
      • setPrefix

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

        protected void setTableSize​(int newSize)