Maven module :un.storage : archive-xz :
Class : un.storage.archive.xz.LZMA2InputStream
Extends/Implements : java.io.InputStream
Subclasses : -

Decompresses a raw LZMA2 stream (no XZ headers).


Variables : DICT_SIZE_MIN, DICT_SIZE_MAX
Functions : getMemoryUsage, LZMA2InputStream, LZMA2InputStream, read, read, available, close



Smallest valid LZMA2 dictionary size.


Very tiny dictionaries would be a performance problem, so
the minimum is 4 KiB.

public int DICT_SIZE_MIN


Largest dictionary size supported by this implementation.


The LZMA2 algorithm allows dictionaries up to one byte less than 4 GiB.
This implementation supports only 16 bytes less than 2 GiB for raw
LZMA2 streams, and for .xz files the maximum is 1.5 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.

public int DICT_SIZE_MAX



Gets approximate decompressor memory requirements as kibibytes for
the given dictionary size.

@param dictSize LZMA2 dictionary size as bytes, must be
in the range [DICT_SIZE_MIN,
DICT_SIZE_MAX]

@return approximate memory requirements as kibibytes (KiB)
public int getMemoryUsage (int dictSize)


Creates a new input stream that decompresses raw LZMA2 data
from in.


The caller needs to know the dictionary size used when compressing;
the dictionary size isn't stored as part of a raw LZMA2 stream.


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.

@param in input stream from which LZMA2-compressed
data is read

@param dictSize LZMA2 dictionary size as bytes, must be
in the range [DICT_SIZE_MIN,
DICT_SIZE_MAX]

public void LZMA2InputStream (InputStream in, int dictSize)


Creates a new LZMA2 decompressor using a preset dictionary.


This is like LZMA2InputStream(InputStream, int) except
that the dictionary may be initialized using a preset dictionary.
If a preset dictionary was used when compressing the data, the
same preset dictionary must be provided when decompressing.

@param in input stream from which LZMA2-compressed
data is read

@param dictSize LZMA2 dictionary size as bytes, must be
in the range [DICT_SIZE_MIN,
DICT_SIZE_MAX]

@param presetDict preset dictionary or null
to use no preset dictionary

public void LZMA2InputStream (InputStream in, int dictSize, byte[] presetDict)


Decompresses the next byte from this input stream.


Reading lots of data with read() from this input stream
may be inefficient. Wrap it in java.io.BufferedInputStream
if you need to read lots of data one byte at a time.

@return the next decompressed byte, or -1
to indicate the end of the compressed stream

@throws CorruptedInputException

@throws XZIOException if the stream has been closed

@throws EOFException
compressed input is truncated or corrupt

@throws IOException may be thrown by in

public int read ()


Decompresses into an array of bytes.


If len is zero, no bytes are read and 0
is returned. Otherwise this will block until len
bytes have been decompressed, the end of the LZMA2 stream is reached,
or an exception is thrown.

@param buf target buffer for uncompressed data
@param off start offset in buf
@param len maximum number of uncompressed bytes to read

@return number of bytes read, or -1 to indicate
the end of the compressed stream

@throws CorruptedInputException

@throws XZIOException if the stream has been closed

@throws EOFException
compressed input is truncated or corrupt

@throws IOException may be thrown by in

public int read (byte[] buf, int off, int len)


Returns the number of uncompressed bytes that can be read
without blocking. The value is returned with an assumption
that the compressed input data will be valid. If the compressed
data is corrupt, CorruptedInputException may get
thrown before the number of bytes claimed to be available have
been read from this input stream.


In LZMA2InputStream, the return value will be non-zero when the
decompressor is in the middle of an LZMA2 chunk. The return value
will then be the number of uncompressed bytes remaining from that
chunk.

@return the number of uncompressed bytes that can be read
without blocking

public int available ()


Closes the stream and calls in.close().
If the stream was already closed, this does nothing.
throws   IOException if thrown by in.close()
public void close ()