Important Note
In contrast to other classes in this package, this class
reads data from its input stream one byte at a time. If the input stream
is for example java., wrapping it into
java. tends to improve performance a lot.
This is not automatically done by this class because there may be use
cases where it is desired that this class won't read any bytes past
the end of the LZMA stream.
Even when using BufferedInputStream, the performance tends
to be worse (maybe 10-20 % slower) than with LZMA2InputStream
or XZInputStream (when the .xz file contains LZMA2-compressed data).
| Modifier and Type | Field and Description |
|---|---|
| private ArrayCache | |
| public static final int | DICT_SIZE_MAX
Largest dictionary size supported by this implementation. |
| private boolean | |
| private IOException | |
| private InputStream | |
| private LZDecoder | |
| private LZMADecoder | |
| private RangeDecoderFromStream | |
| private boolean | |
| private long | remainingSize
Number of uncompressed bytes left to be decompressed, or -1 if the end marker is used. |
| private final byte[] |
| Access | Constructor and Description |
|---|---|
| public | LZMAInputStream(InputStream
input stream from which .lzma data is read;
it might be a good idea to wrap it in
in)BufferedInputStream, see the
note at the top of this pageCreates a new .lzma file format decompressor without a memory usage limit. |
| public | LZMAInputStream(InputStream
input stream from which .lzma data is read;
it might be a good idea to wrap it in
in, ArrayCache BufferedInputStream, see the
note at the top of this pagecache to be used for allocating large arrays arrayCache)Creates a new .lzma file format decompressor without a memory usage limit. |
| public | LZMAInputStream(InputStream
input stream from which .lzma data is read;
it might be a good idea to wrap it in
in, int BufferedInputStream, see the
note at the top of this pagememory usage limit in kibibytes (KiB)
or memoryLimit)-1 to impose no
memory usage limitCreates a new .lzma file format decompressor with an optional memory usage limit. |
| public | LZMAInputStream(InputStream
input stream from which .lzma data is read;
it might be a good idea to wrap it in
in, int BufferedInputStream, see the
note at the top of this pagememory usage limit in kibibytes (KiB)
or memoryLimit, ArrayCache -1 to impose no
memory usage limitcache to be used for allocating large arrays arrayCache)Creates a new .lzma file format decompressor with an optional memory usage limit. |
| public | LZMAInputStream(InputStream
input stream from which compressed
data is read in, long uncompressed size of the LZMA stream or -1
if the end marker is used in the LZMA stream uncompSize, byte LZMA properties byte that has the encoded
values for literal context bits (lc), literal
position bits (lp), and position bits (pb) propsByte, int dictionary size as bytes, must be in the range
[ dictSize)0, DICT_SIZE_MAX]Creates a new input stream that decompresses raw LZMA data (no .lzma
header) from |
| public | LZMAInputStream(InputStream
input stream from which LZMA-compressed
data is read in, long uncompressed size of the LZMA stream or -1
if the end marker is used in the LZMA stream uncompSize, byte LZMA properties byte that has the encoded
values for literal context bits (lc), literal
position bits (lp), and position bits (pb) propsByte, int dictionary size as bytes, must be in the range
[ dictSize, byte[] 0, DICT_SIZE_MAX]preset dictionary or presetDict)null
to use no preset dictionaryCreates a new input stream that decompresses raw LZMA data (no .lzma
header) from |
| public | LZMAInputStream(InputStream
input stream from which LZMA-compressed
data is read in, long uncompressed size of the LZMA stream or -1
if the end marker is used in the LZMA stream uncompSize, byte LZMA properties byte that has the encoded
values for literal context bits (lc), literal
position bits (lp), and position bits (pb) propsByte, int dictionary size as bytes, must be in the range
[ dictSize, byte[] 0, DICT_SIZE_MAX]preset dictionary or presetDict, ArrayCache null
to use no preset dictionarycache to be used for allocating large arrays arrayCache)Creates a new input stream that decompresses raw LZMA data (no .lzma
header) from |
| public | LZMAInputStream(InputStream
input stream from which LZMA-compressed
data is read in, long uncompressed size of the LZMA stream or -1
if the end marker is used in the LZMA stream uncompSize, int number of literal context bits, must be
in the range [0, 8] lc, int number of literal position bits, must be
in the range [0, 4] lp, int number position bits, must be
in the range [0, 4] pb, int dictionary size as bytes, must be in the range
[ dictSize, byte[] 0, DICT_SIZE_MAX]preset dictionary or presetDict)null
to use no preset dictionaryCreates a new input stream that decompresses raw LZMA data (no .lzma
header) from |
| public | LZMAInputStream(InputStream
input stream from which LZMA-compressed
data is read in, long uncompressed size of the LZMA stream or -1
if the end marker is used in the LZMA stream uncompSize, int number of literal context bits, must be
in the range [0, 8] lc, int number of literal position bits, must be
in the range [0, 4] lp, int number position bits, must be
in the range [0, 4] pb, int dictionary size as bytes, must be in the range
[ dictSize, byte[] 0, DICT_SIZE_MAX]preset dictionary or presetDict, ArrayCache null
to use no preset dictionarycache to be used for allocating large arrays arrayCache)Creates a new input stream that decompresses raw LZMA data (no .lzma
header) from |
| Modifier and Type | Method and Description |
|---|---|
| public void | close()
Overrides java. Implements java. in.close().
|
| public void | |
| private static int | |
| public static int | Returns: approximate memory requirements as kibibytes (KiB)LZMA dictionary size as bytes, should be
in the range [ dictSize, byte 0,
DICT_SIZE_MAX]LZMA properties byte that encodes the values
of lc, lp, and pb propsByte)Gets approximate decompressor memory requirements as kibibytes for the given dictionary size and LZMA properties byte (lc, lp, and pb). |
| public static int | Returns: approximate memory requirements as kibibytes (KiB)LZMA dictionary size as bytes, must be
in the range [ dictSize, int 0,
DICT_SIZE_MAX]number of literal context bits, must be
in the range [0, 8] lc, int number of literal position bits, must be
in the range [0, 4] lp)Gets approximate decompressor memory requirements as kibibytes for the given dictionary size, lc, and lp. |
| private void | initialize(InputStream in, long uncompSize, byte propsByte, int dictSize, byte[] presetDict, ArrayCache arrayCache)
|
| private void | initialize(InputStream in, long uncompSize, int lc, int lp, int pb, int dictSize, byte[] presetDict, ArrayCache arrayCache)
|
| private void | |
| public int | Returns: the next decompressed byte, or-1
to indicate the end of the compressed streamImplements abstract java. |
| public int | Returns: number of bytes read, or-1 to indicate
the end of the compressed streamtarget buffer for uncompressed data buf, int start offset in off, int bufmaximum number of uncompressed bytes to read len)Overrides java. |
| arrayCache | back to summary |
|---|---|
| private ArrayCache arrayCache | |
| DICT_SIZE_MAX | back to summary |
|---|---|
| public static final int DICT_SIZE_MAX Largest dictionary size supported by this implementation. LZMA allows dictionaries up to one byte less than 4 GiB. This implementation supports only 16 bytes less than 2 GiB. This limitation is due to Java using signed 32-bit integers for array indexing. The limitation shouldn't matter much in practice since so huge dictionaries are not normally used. | |
| endReached | back to summary |
|---|---|
| private boolean endReached | |
| exception | back to summary |
|---|---|
| private IOException exception | |
| in | back to summary |
|---|---|
| private InputStream in | |
| lz | back to summary |
|---|---|
| private LZDecoder lz | |
| lzma | back to summary |
|---|---|
| private LZMADecoder lzma | |
| rc | back to summary |
|---|---|
| private RangeDecoderFromStream rc | |
| relaxedEndCondition | back to summary |
|---|---|
| private boolean relaxedEndCondition | |
| remainingSize | back to summary |
|---|---|
| private long remainingSize Number of uncompressed bytes left to be decompressed, or -1 if the end marker is used. | |
| tempBuf | back to summary |
|---|---|
| private final byte[] tempBuf | |
| LZMAInputStream | back to summary |
|---|---|
| public LZMAInputStream(InputStream in) throws IOException Creates a new .lzma file format decompressor without a memory usage limit.
| |
| LZMAInputStream | back to summary |
|---|---|
| public LZMAInputStream(InputStream in, ArrayCache arrayCache) throws IOException Creates a new .lzma file format decompressor without a memory usage limit.
This is identical to
| |
| LZMAInputStream | back to summary |
|---|---|
| public LZMAInputStream(InputStream in, int memoryLimit) throws IOException Creates a new .lzma file format decompressor with an optional memory usage limit.
| |
| LZMAInputStream | back to summary |
|---|---|
| public LZMAInputStream(InputStream in, int memoryLimit, ArrayCache arrayCache) throws IOException Creates a new .lzma file format decompressor with an optional memory usage limit.
This is identical to
| |
| LZMAInputStream | back to summary |
|---|---|
| public LZMAInputStream(InputStream in, long uncompSize, byte propsByte, int dictSize) throws IOException Creates a new input stream that decompresses raw LZMA data (no .lzma
header) from The caller needs to know if the "end of payload marker (EOPM)" alias "end of stream marker (EOS marker)" alias "end marker" present. If the end marker isn't used, the caller must know the exact uncompressed size of the stream. The caller also needs to provide the LZMA properties byte that encodes the number of literal context bits (lc), literal position bits (lp), and position bits (pb). The dictionary size used when compressing is also needed. Specifying a too small dictionary size will prevent decompressing the stream. Specifying a too big dictionary is waste of memory but decompression will work. There is no need to specify a dictionary bigger than the uncompressed size of the data even if a bigger dictionary was used when compressing. If you know the uncompressed size of the data, this might allow saving some memory.
| |
| LZMAInputStream | back to summary |
|---|---|
| public LZMAInputStream(InputStream in, long uncompSize, byte propsByte, int dictSize, byte[] presetDict) throws IOException Creates a new input stream that decompresses raw LZMA data (no .lzma
header) from
| |
| LZMAInputStream | back to summary |
|---|---|
| public LZMAInputStream(InputStream in, long uncompSize, byte propsByte, int dictSize, byte[] presetDict, ArrayCache arrayCache) throws IOException Creates a new input stream that decompresses raw LZMA data (no .lzma
header) from
This is identical to
| |
| LZMAInputStream | back to summary |
|---|---|
| public LZMAInputStream(InputStream in, long uncompSize, int lc, int lp, int pb, int dictSize, byte[] presetDict) throws IOException Creates a new input stream that decompresses raw LZMA data (no .lzma
header) from
| |
| LZMAInputStream | back to summary |
|---|---|
| public LZMAInputStream(InputStream in, long uncompSize, int lc, int lp, int pb, int dictSize, byte[] presetDict, ArrayCache arrayCache) throws IOException Creates a new input stream that decompresses raw LZMA data (no .lzma
header) from
This is identical to
| |
| close | back to summary |
|---|---|
| public void close() throws IOException Overrides java. Implements java. Closes the stream and calls
| |
| enableRelaxedEndCondition | back to summary |
|---|---|
| public void enableRelaxedEndCondition() Enables relaxed end-of-stream condition when uncompressed size is known. This is useful if uncompressed size is known but it is unknown if the end of stream (EOS) marker is present. After calling this function, both are allowed. Note that this doesn't actually check if the EOS marker is present. This introduces a few minor downsides:
This should be called after the constructor before reading any data from the stream. This is a separate function because adding even more constructors to this class didn't look like a good alternative.
| |
| getDictSize | back to summary |
|---|---|
| private static int getDictSize(int dictSize) | |
| getMemoryUsage | back to summary |
|---|---|
| public static int getMemoryUsage(int dictSize, byte propsByte) throws UnsupportedOptionsException, CorruptedInputException Gets approximate decompressor memory requirements as kibibytes for the given dictionary size and LZMA properties byte (lc, lp, and pb).
| |
| getMemoryUsage | back to summary |
|---|---|
| public static int getMemoryUsage(int dictSize, int lc, int lp) Gets approximate decompressor memory requirements as kibibytes for the given dictionary size, lc, and lp. Note that pb isn't needed.
| |
| initialize | back to summary |
|---|---|
| private void initialize(InputStream in, long uncompSize, byte propsByte, int dictSize, byte[] presetDict, ArrayCache arrayCache) throws IOException | |
| initialize | back to summary |
|---|---|
| private void initialize(InputStream in, long uncompSize, int lc, int lp, int pb, int dictSize, byte[] presetDict, ArrayCache arrayCache) throws IOException | |
| putArraysToCache | back to summary |
|---|---|
| private void putArraysToCache() | |
| read | back to summary |
|---|---|
| public int read() throws IOException Implements abstract java. Decompresses the next byte from this input stream.
Reading lots of data with
| |
| read | back to summary |
|---|---|
| public int read(byte[] buf, int off, int len) throws IOException Overrides java. Decompresses into an array of bytes.
If
| |