Class LZWDecompresser

  • Direct Known Subclasses:
    CompressedRTF, HDGFLZW

    public abstract class LZWDecompresser
    extends java.lang.Object
    This class provides common functionality for the various LZW implementations in the different file formats. It's currently used by HDGF and HMEF. Two good resources on LZW are: http://en.wikipedia.org/wiki/LZW http://marknelson.us/1989/10/01/lzw-data-compression/
    • Method Summary

      All Methods Static Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      byte[] decompress​(java.io.InputStream src)
      Decompresses the given input stream, returning the array of bytes of the decompressed input.
      void decompress​(java.io.InputStream src, java.io.OutputStream res)
      Perform a streaming decompression of the input.
      static int fromByte​(byte b)
      Given a java byte, turn it into an integer between 0 and 255 (i.e.
      static byte fromInt​(int b)
      Given an integer, turn it into a java byte, handling the wrapping.
      • Methods inherited from class java.lang.Object

        equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Method Detail

      • decompress

        public byte[] decompress​(java.io.InputStream src)
                          throws java.io.IOException
        Decompresses the given input stream, returning the array of bytes of the decompressed input.
        Throws:
        java.io.IOException
      • decompress

        public void decompress​(java.io.InputStream src,
                               java.io.OutputStream res)
                        throws java.io.IOException
        Perform a streaming decompression of the input. Works by: 1) Reading a flag byte, the 8 bits of which tell you if the following 8 codes are compressed our un-compressed 2) Consider the 8 bits in turn 3) If the bit is set, the next code is un-compressed, so add it to the dictionary and output it 4) If the bit isn't set, then read in the length and start position in the dictionary, and output the bytes there 5) Loop until we've done all 8 bits, then read in the next flag byte
        Throws:
        java.io.IOException
      • fromInt

        public static byte fromInt​(int b)
        Given an integer, turn it into a java byte, handling the wrapping. This is a convenience method
      • fromByte

        public static int fromByte​(byte b)
        Given a java byte, turn it into an integer between 0 and 255 (i.e. handle the unwrapping). This is a convenience method