Class LZWFilter


  • public class LZWFilter
    extends Filter
    This is the filter used for the LZWDecode filter.
    • Field Summary

      Fields 
      Modifier and Type Field Description
      static long CLEAR_TABLE
      The LZW clear table code.
      static long EOD
      The LZW end of data code.
      private static org.apache.commons.logging.Log LOG
      Log instance.
    • Constructor Summary

      Constructors 
      Constructor Description
      LZWFilter()  
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      private int calculateChunk​(int tabSize, int earlyChange)
      Calculate the appropriate chunk size
      private void checkIndexBounds​(java.util.List<byte[]> codeTable, long index, javax.imageio.stream.MemoryCacheImageInputStream in)  
      private java.util.List<byte[]> createCodeTable()
      Init the code table with 1 byte entries and the EOD and CLEAR_TABLE markers.
      DecodeResult decode​(java.io.InputStream encoded, java.io.OutputStream decoded, COSDictionary parameters, int index)
      Decodes data, producing the original non-encoded data.
      private void doLZWDecode​(java.io.InputStream encoded, java.io.OutputStream decoded, int earlyChange)  
      protected void encode​(java.io.InputStream rawData, java.io.OutputStream encoded, COSDictionary parameters)
      private int findPatternCode​(java.util.List<byte[]> codeTable, byte[] pattern)
      Find the longest matching pattern in the code table.
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Field Detail

      • LOG

        private static final org.apache.commons.logging.Log LOG
        Log instance.
      • CLEAR_TABLE

        public static final long CLEAR_TABLE
        The LZW clear table code.
        See Also:
        Constant Field Values
    • Constructor Detail

      • LZWFilter

        public LZWFilter()
    • Method Detail

      • decode

        public DecodeResult decode​(java.io.InputStream encoded,
                                   java.io.OutputStream decoded,
                                   COSDictionary parameters,
                                   int index)
                            throws java.io.IOException
        Decodes data, producing the original non-encoded data.
        Specified by:
        decode in class Filter
        Parameters:
        encoded - the encoded byte stream
        decoded - the stream where decoded data will be written
        parameters - the parameters used for decoding
        index - the index to the filter being decoded
        Returns:
        repaired parameters dictionary, or the original parameters dictionary
        Throws:
        java.io.IOException - if the stream cannot be decoded
      • doLZWDecode

        private void doLZWDecode​(java.io.InputStream encoded,
                                 java.io.OutputStream decoded,
                                 int earlyChange)
                          throws java.io.IOException
        Throws:
        java.io.IOException
      • checkIndexBounds

        private void checkIndexBounds​(java.util.List<byte[]> codeTable,
                                      long index,
                                      javax.imageio.stream.MemoryCacheImageInputStream in)
                               throws java.io.IOException
        Throws:
        java.io.IOException
      • encode

        protected void encode​(java.io.InputStream rawData,
                              java.io.OutputStream encoded,
                              COSDictionary parameters)
                       throws java.io.IOException
        Specified by:
        encode in class Filter
        Throws:
        java.io.IOException
      • findPatternCode

        private int findPatternCode​(java.util.List<byte[]> codeTable,
                                    byte[] pattern)
        Find the longest matching pattern in the code table.
        Parameters:
        codeTable - The LZW code table.
        pattern - The pattern to be searched for.
        Returns:
        The index of the longest matching pattern or -1 if nothing is found.
      • createCodeTable

        private java.util.List<byte[]> createCodeTable()
        Init the code table with 1 byte entries and the EOD and CLEAR_TABLE markers.
      • calculateChunk

        private int calculateChunk​(int tabSize,
                                   int earlyChange)
        Calculate the appropriate chunk size
        Parameters:
        tabSize - the size of the code table
        earlyChange - 0 or 1 for early chunk increase
        Returns:
        a value between 9 and 12