org.apache.commons.compress.compressors.lzw

## 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

      public abstract class LZWInputStream
      extends CompressorInputStream
      implements InputStreamStatistics

  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

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `protected static int` | `DEFAULT_CODE_SIZE`
    `protected BitInputStream` | `in`
    `protected static int` | `UNUSED_PREFIX`

  - ### Constructor Summary

    Constructors
    Modifier | Constructor and Description
    --- | ---
    `protected` | `LZWInputStream(InputStream inputStream, ByteOrder byteOrder)`

  - ### Method Summary

    All Methods Instance Methods Abstract Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `protected abstract int` | `addEntry(int previousCode, byte character)` Add a new entry to the dictionary.
    `protected int` | `addEntry(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 int` | `addRepeatOfPreviousCode()` Add entry for repeat of previousCode we haven't added, yet.
    `void` | `close()`
    `protected abstract int` | `decompressNextSymbol()` Read the next code and expand it.
    `protected int` | `expandCodeToOutputStack(int code, boolean addedUnfinishedEntry)` Expands the entry with index code to the output stack and may create a new entry
    `protected int` | `getClearCode()`
    `protected int` | `getCodeSize()`
    `long` | `getCompressedCount()`
    `protected int` | `getPrefix(int offset)`
    `protected int` | `getPrefixesLength()`
    `protected int` | `getTableSize()`
    `protected void` | `incrementCodeSize()`
    `protected void` | `initializeTables(int maxCodeSize)` Initializes the arrays based on the maximum code size.
    `protected void` | `initializeTables(int maxCodeSize, int memoryLimitInKb)` Initializes the arrays based on the maximum code size.
    `int` | `read()`
    `int` | `read(byte[] b, int off, int len)`
    `protected int` | `readNextCode()` Reads the next code from the stream.
    `protected void` | `resetCodeSize()`
    `protected void` | `resetPreviousCode()`
    `protected void` | `setClearCode(int codeSize)` Sets the clear code based on the code size.
    `protected void` | `setCodeSize(int cs)`
    `protected void` | `setPrefix(int offset, int value)`
    `protected void` | `setTableSize(int newSize)`

    - ### Methods inherited from class org.apache.commons.compress.compressors.CompressorInputStream

      `count, count, getBytesRead, getCount, getUncompressedCount, pushedBackBytes`

    - ### Methods inherited from class java.io.InputStream

      `available, mark, markSupported, read, reset, skip`

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

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

    - ### Methods inherited from interface org.apache.commons.compress.utils.InputStreamStatistics

      `getUncompressedCount`

- - ### Field Detail

    - #### DEFAULT_CODE_SIZE

          protected static final int DEFAULT_CODE_SIZE

      See Also:
        Constant Field Values

    - #### UNUSED_PREFIX

          protected static final int UNUSED_PREFIX

      See Also:
        Constant Field Values

    - #### in

          protected final BitInputStream in

  - ### Constructor Detail

    - #### LZWInputStream

          protected LZWInputStream(InputStream inputStream,
                                   ByteOrder byteOrder)

  - ### Method Detail

    - #### addEntry

          protected abstract int addEntry(int previousCode,
                                          byte character)
                                   throws IOException

      Add a new entry to the dictionary.
      Parameters:
        `previousCode` - the previous code
        `character` - the next character to append
      Returns:
        the new code
      Throws:
        `IOException` - on error

    - #### addEntry

          protected int addEntry(int previousCode,
                                 byte character,
                                 int maxTableSize)

      Adds a new entry if the maximum table size hasn't been exceeded and returns the new index.
      Parameters:
        `previousCode` - the previous code
        `character` - the character to append
        `maxTableSize` - the maximum table size
      Returns:
        the new code or -1 if maxTableSize has been reached already

    - #### addRepeatOfPreviousCode

          protected int addRepeatOfPreviousCode()
                                         throws IOException

      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

          public void close()
                     throws IOException

      Specified by:
        `close` in interface `Closeable`
      Specified by:
        `close` in interface `AutoCloseable`
      Overrides:
        `close` in class `InputStream`
      Throws:
        `IOException`

    - #### decompressNextSymbol

          protected abstract int decompressNextSymbol()
                                               throws IOException

      Read the next code and expand it.
      Returns:
        the expanded next code, negative on EOF
      Throws:
        `IOException` - on error

    - #### expandCodeToOutputStack

          protected int expandCodeToOutputStack(int code,
                                                boolean addedUnfinishedEntry)
                                         throws IOException

      Expands the entry with index code to the output stack and may create a new entry
      Parameters:
        `code` - the code
        `addedUnfinishedEntry` - whether unfinished entries have been added
      Returns:
        the new location of the output stack
      Throws:
        `IOException` - on error

    - #### getClearCode

          protected int getClearCode()

    - #### getCodeSize

          protected int getCodeSize()

    - #### getCompressedCount

          public long getCompressedCount()

      Specified by:
        `getCompressedCount` in interface `InputStreamStatistics`
      Returns:
        the amount of raw or compressed bytes read by the stream
      Since:
        1.17

    - #### getPrefix

          protected int getPrefix(int offset)

    - #### getPrefixesLength

          protected int getPrefixesLength()

    - #### getTableSize

          protected int getTableSize()

    - #### incrementCodeSize

          protected void incrementCodeSize()

    - #### initializeTables

          protected void initializeTables(int maxCodeSize)

      Initializes the arrays based on the maximum code size.
      Parameters:
        `maxCodeSize` - maximum code size
      Throws:
        `IllegalArgumentException` - if `maxCodeSize` is not bigger than 0

    - #### initializeTables

          protected void initializeTables(int maxCodeSize,
                                          int memoryLimitInKb)
                                   throws MemoryLimitException

      Initializes the arrays based on the maximum code size. First checks that the estimated memory usage is below memoryLimitInKb
      Parameters:
        `maxCodeSize` - maximum code size
        `memoryLimitInKb` - maximum allowed estimated memory usage in Kb
      Throws:
        `MemoryLimitException` - if estimated memory usage is greater than memoryLimitInKb
        `IllegalArgumentException` - if `maxCodeSize` is not bigger than 0

    - #### read

          public int read()
                   throws IOException

      Specified by:
        `read` in class `InputStream`
      Throws:
        `IOException`

    - #### read

          public int read(byte[] b,
                          int off,
                          int len)
                   throws IOException

      Overrides:
        `read` in class `InputStream`
      Throws:
        `IOException`

    - #### readNextCode

          protected int readNextCode()
                              throws IOException

      Reads the next code from the stream.
      Returns:
        the next code
      Throws:
        `IOException` - on error

    - #### resetCodeSize

          protected void resetCodeSize()

    - #### resetPreviousCode

          protected void resetPreviousCode()

    - #### setClearCode

          protected void setClearCode(int codeSize)

      Sets the clear code based on the code size.
      Parameters:
        `codeSize` - code size

    - #### setCodeSize

          protected void setCodeSize(int cs)

    - #### setPrefix

          protected void setPrefix(int offset,
                                   int value)

    - #### setTableSize

          protected void setTableSize(int newSize)

Copyright © 2002–2022 The Apache Software Foundation. All rights reserved.