org.apache.poi.hdgf

## Class HDGFLZW

- java.lang.Object
- - org.apache.poi.util.LZWDecompresser
  - - org.apache.poi.hdgf.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/

- - ### Field Summary

    - ### Fields inherited from class org.apache.poi.util.LZWDecompresser

      `DICT_MASK, DICT_SIZE`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `HDGFLZW()`

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `protected int` | `adjustDictionaryOffset(int pntr)` We have a slight shift by 18 bytes
    `byte[]` | `compress(java.io.InputStream src)` Compress the given input stream, returning the array of bytes of the compressed input
    `void` | `compress(java.io.InputStream src, java.io.OutputStream res)` Performs the Visio compatible streaming LZW compression.
    `protected int` | `populateDictionary(byte[] dict)` We want an empty dictionary, so do nothing

    - ### Methods inherited from class org.apache.poi.util.LZWDecompresser

      `decompress, decompress`

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Constructor Detail

    - #### HDGFLZW

          public HDGFLZW()

  - ### Method Detail

    - #### compress

          public byte[] compress(java.io.InputStream src)
                          throws java.io.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:
        `java.io.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(java.io.InputStream src,
                               java.io.OutputStream res)
                        throws java.io.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:
        `java.io.IOException` - when the InputStream can't be read or the OutputStream can't be written to

Copyright 2020 The Apache Software Foundation or its licensors, as applicable.