Package org.apache.poi.util
Class LZWDecompresser
- java.lang.Object
- 
- org.apache.poi.util.LZWDecompresser
 
- 
 public abstract class LZWDecompresser extends 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/ 
- 
- 
Constructor SummaryConstructors Modifier Constructor Description protectedLZWDecompresser(boolean maskMeansCompressed, int codeLengthIncrease, boolean positionIsBigEndian)
 - 
Method SummaryAll Methods Static Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description protected abstract intadjustDictionaryOffset(int offset)Adjusts the position offset if needed when looking something up in the dictionary.byte[]decompress(InputStream src)Decompresses the given input stream, returning the array of bytes of the decompressed input.voiddecompress(InputStream src, OutputStream res)Perform a streaming decompression of the input.static intgetMaxRecordLength()protected abstract intpopulateDictionary(byte[] dict)Populates the dictionary, and returns where in it to begin writing new codes.static voidsetMaxRecordLength(int length)
 
- 
- 
- 
Field Detail- 
DICT_SIZEpublic static final int DICT_SIZE the size of our dictionary- See Also:
- Constant Field Values
 
 - 
DICT_MASKpublic static final int DICT_MASK the mask for calculating / wrapping dictionary offsets- See Also:
- Constant Field Values
 
 
- 
 - 
Method Detail- 
setMaxRecordLengthpublic static void setMaxRecordLength(int length) - Parameters:
- length- the max record length allowed for LZWDecompresser
 
 - 
getMaxRecordLengthpublic static int getMaxRecordLength() - Returns:
- the max record length allowed for LZWDecompresser
 
 - 
populateDictionaryprotected abstract int populateDictionary(byte[] dict) Populates the dictionary, and returns where in it to begin writing new codes. Generally, if the dictionary is pre-populated, then new codes should be placed at the end of that block. Equally, if the dictionary is left with all zeros, then usually the new codes can go in at the start.
 - 
adjustDictionaryOffsetprotected abstract int adjustDictionaryOffset(int offset) Adjusts the position offset if needed when looking something up in the dictionary.
 - 
decompresspublic byte[] decompress(InputStream src) throws IOException Decompresses the given input stream, returning the array of bytes of the decompressed input.- Throws:
- IOException
 
 - 
decompresspublic void decompress(InputStream src, OutputStream res) throws 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:
- IOException
 
 
- 
 
-