Class LZWInputStream
java.lang.Object
java.io.InputStream
org.apache.commons.compress.compressors.CompressorInputStream
org.apache.commons.compress.compressors.lzw.LZWInputStream
- All Implemented Interfaces:
Closeable,AutoCloseable,InputStreamStatistics
- Direct Known Subclasses:
ZCompressorInputStream
Generic LZW implementation. It is used internally for the Z decompressor and the Unshrinking Zip file compression method, but may be useful for third-party projects in implementing their own LZW variations.
- Since:
- 1.10
- This class is not thread-safe
-
Field Summary
FieldsModifier and TypeFieldDescriptionprotected static final intprotected final BitInputStreamprotected static final int -
Constructor Summary
ConstructorsModifierConstructorDescriptionprotectedLZWInputStream(InputStream inputStream, ByteOrder byteOrder) -
Method Summary
Modifier and TypeMethodDescriptionprotected abstract intaddEntry(int previousCode, byte character) Add a new entry to the dictionary.protected intaddEntry(int previousCode, byte character, int maxTableSize) Adds a new entry if the maximum table size hasn't been exceeded and returns the new index.protected intAdd entry for repeat of previousCode we haven't added, yet.voidclose()protected abstract intRead the next code and expand it.protected intexpandCodeToOutputStack(int code, boolean addedUnfinishedEntry) Expands the entry with index code to the output stack and may create a new entryprotected intprotected intlongGets the amount of raw or compressed bytes read by the stream.protected intgetPrefix(int offset) protected intprotected intprotected voidprotected voidinitializeTables(int maxCodeSize) Initializes the arrays based on the maximum code size.protected voidinitializeTables(int maxCodeSize, int memoryLimitInKb) Initializes the arrays based on the maximum code size.intread()intread(byte[] b, int off, int len) protected intReads the next code from the stream.protected voidprotected voidprotected voidsetClearCode(int codeSize) Sets the clear code based on the code size.protected voidsetCodeSize(int cs) protected voidsetPrefix(int offset, int value) protected voidsetTableSize(int newSize) Methods inherited from class org.apache.commons.compress.compressors.CompressorInputStream
count, count, getBytesRead, getCount, getUncompressedCount, pushedBackBytesMethods inherited from class java.io.InputStream
available, mark, markSupported, read, reset, skipMethods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface org.apache.commons.compress.utils.InputStreamStatistics
getUncompressedCount
-
Field Details
-
DEFAULT_CODE_SIZE
- See Also:
-
UNUSED_PREFIX
- See Also:
-
in
-
-
Constructor Details
-
LZWInputStream
-
-
Method Details
-
addEntry
Add a new entry to the dictionary.- Parameters:
previousCode- the previous codecharacter- the next character to append- Returns:
- the new code
- Throws:
IOException- on error
-
addEntry
Adds a new entry if the maximum table size hasn't been exceeded and returns the new index.- Parameters:
previousCode- the previous codecharacter- the character to appendmaxTableSize- the maximum table size- Returns:
- the new code or -1 if maxTableSize has been reached already
-
addRepeatOfPreviousCode
Add entry for repeat of previousCode we haven't added, yet.- Returns:
- new code for a repeat of the previous code or -1 if maxTableSize has been reached already
- Throws:
IOException- on error
-
close
- Specified by:
closein interfaceAutoCloseable- Specified by:
closein interfaceCloseable- Overrides:
closein classInputStream- Throws:
IOException
-
decompressNextSymbol
Read the next code and expand it.- Returns:
- the expanded next code, negative on EOF
- Throws:
IOException- on error
-
expandCodeToOutputStack
Expands the entry with index code to the output stack and may create a new entry- Parameters:
code- the codeaddedUnfinishedEntry- whether unfinished entries have been added- Returns:
- the new location of the output stack
- Throws:
IOException- on error
-
getClearCode
-
getCodeSize
-
getCompressedCount
Description copied from interface:InputStreamStatisticsGets the amount of raw or compressed bytes read by the stream.- Specified by:
getCompressedCountin interfaceInputStreamStatistics- Returns:
- the amount of raw or compressed bytes read by the stream.
- Since:
- 1.17
-
getPrefix
-
getPrefixesLength
-
getTableSize
-
incrementCodeSize
-
initializeTables
Initializes the arrays based on the maximum code size.- Parameters:
maxCodeSize- maximum code size- Throws:
IllegalArgumentException- ifmaxCodeSizeis out of bounds forprefixesandcharacters.
-
initializeTables
Initializes the arrays based on the maximum code size. First checks that the estimated memory usage is below memoryLimitInKb- Parameters:
maxCodeSize- maximum code sizememoryLimitInKb- maximum allowed estimated memory usage in Kb- Throws:
MemoryLimitException- if estimated memory usage is greater than memoryLimitInKbIllegalArgumentException- ifmaxCodeSizeis not bigger than 0
-
read
- Specified by:
readin classInputStream- Throws:
IOException
-
read
- Overrides:
readin classInputStream- Throws:
IOException
-
readNextCode
Reads the next code from the stream.- Returns:
- the next code
- Throws:
IOException- on error
-
resetCodeSize
-
resetPreviousCode
-
setClearCode
Sets the clear code based on the code size.- Parameters:
codeSize- code size
-
setCodeSize
-
setPrefix
-
setTableSize
-