Class HDGFLZW


public class HDGFLZW extends LZWDecompresser
A decoder for the crazy LZW implementation used in Visio. According to VSDump, "it's a slightly perverted version of LZW compression, with inverted meaning of flag byte and 0xFEE as an 'initial shift'". It uses 12 bit codes (http://www.gnome.ru/projects/vsdump_en.html) Two good resources on LZW are: http://en.wikipedia.org/wiki/LZW http://marknelson.us/1989/10/01/lzw-data-compression/
  • Constructor Details

    • HDGFLZW

      public HDGFLZW()
  • Method Details

    • compress

      public byte[] compress(InputStream src) throws IOException
      Compress the given input stream, returning the array of bytes of the compressed input
      Parameters:
      src - the compression source byte
      Returns:
      the compressed stream as bytes
      Throws:
      IOException - when the InputStream can't be read
    • adjustDictionaryOffset

      protected int adjustDictionaryOffset(int pntr)
      We have a slight shift by 18 bytes
      Specified by:
      adjustDictionaryOffset in class LZWDecompresser
    • populateDictionary

      protected int populateDictionary(byte[] dict)
      We want an empty dictionary, so do nothing
      Specified by:
      populateDictionary in class LZWDecompresser
    • compress

      public void compress(InputStream src, OutputStream res) throws IOException
      Performs the Visio compatible streaming LZW compression.
      Parameters:
      src - the input bytes for the compression
      res - the OutputStream which receives the compressed bytes
      Throws:
      IOException - when the InputStream can't be read or the OutputStream can't be written to