public class XZInputStream
extends java.io.InputStream
Use this to decompress regular standalone .xz files. This reads from its input stream until the end of the input or until an error occurs. This supports decompressing concatenated .xz files.
Getting an input stream to decompress a .xz file:
InputStream infile = new FileInputStream("foo.xz");
XZInputStream inxz = new XZInputStream(infile);
It's important to keep in mind that decompressor memory usage depends on the settings used to compress the file. The worst-case memory usage of XZInputStream is currently 1.5 GiB. Still, very few files will require more than about 65 MiB because that's how much decompressing a file created with the highest preset level will need, and only a few people use settings other than the predefined presets.
It is possible to specify a memory usage limit for
XZInputStream. If decompression requires more memory than
the specified limit, MemoryLimitException will be thrown when reading
from the stream. For example, the following sets the memory usage limit
to 100 MiB:
InputStream infile = new FileInputStream("foo.xz");
XZInputStream inxz = new XZInputStream(infile, 100 * 1024);
If you are decompressing complete files and your application knows
exactly how much uncompressed data there should be, it is good to try
reading one more byte by calling read() and checking
that it returns -1. This way the decompressor will parse the
file footers and verify the integrity checks, giving the caller more
confidence that the uncompressed data is valid. (This advice seems to
apply to
java.util.zip.GZIPInputStream too.)
SingleXZInputStream| Constructor and Description |
|---|
XZInputStream(java.io.InputStream in)
Creates a new XZ decompressor without a memory usage limit.
|
XZInputStream(java.io.InputStream in,
int memoryLimit)
Creates a new XZ decompressor with an optional memory usage limit.
|
XZInputStream(java.io.InputStream in,
int memoryLimit,
boolean verifyCheck)
Creates a new XZ decompressor with an optional memory usage limit
and ability to disable verification of integrity checks.
|
| Modifier and Type | Method and Description |
|---|---|
int |
available()
Returns the number of uncompressed bytes that can be read
without blocking.
|
void |
close()
Closes the stream and calls
in.close(). |
int |
read()
Decompresses the next byte from this input stream.
|
int |
read(byte[] buf,
int off,
int len)
Decompresses into an array of bytes.
|
public XZInputStream(java.io.InputStream in)
throws java.io.IOException
This constructor reads and parses the XZ Stream Header (12 bytes)
from in. The header of the first Block is not read
until read is called.
in - input stream from which XZ-compressed
data is readXZFormatException - input is not in the XZ formatCorruptedInputException - XZ header CRC32 doesn't matchUnsupportedOptionsException - XZ header is valid but specifies options
not supported by this implementationjava.io.EOFException - less than 12 bytes of input was available
from injava.io.IOException - may be thrown by inpublic XZInputStream(java.io.InputStream in,
int memoryLimit)
throws java.io.IOException
This is identical to XZInputStream(InputStream) except
that this takes also the memoryLimit argument.
in - input stream from which XZ-compressed
data is readmemoryLimit - memory usage limit in kibibytes (KiB)
or -1 to impose no
memory usage limitXZFormatException - input is not in the XZ formatCorruptedInputException - XZ header CRC32 doesn't matchUnsupportedOptionsException - XZ header is valid but specifies options
not supported by this implementationjava.io.EOFException - less than 12 bytes of input was available
from injava.io.IOException - may be thrown by inpublic XZInputStream(java.io.InputStream in,
int memoryLimit,
boolean verifyCheck)
throws java.io.IOException
This is identical to XZInputStream(InputStream,int) except
that this takes also the verifyCheck argument.
Note that integrity check verification should almost never be disabled. Possible reasons to disable integrity check verification:
verifyCheck only affects the integrity check of
the actual compressed data. The CRC32 fields in the headers
are always verified.
in - input stream from which XZ-compressed
data is readmemoryLimit - memory usage limit in kibibytes (KiB)
or -1 to impose no
memory usage limitverifyCheck - if true, the integrity checks
will be verified; this should almost never
be set to falseXZFormatException - input is not in the XZ formatCorruptedInputException - XZ header CRC32 doesn't matchUnsupportedOptionsException - XZ header is valid but specifies options
not supported by this implementationjava.io.EOFException - less than 12 bytes of input was available
from injava.io.IOException - may be thrown by inpublic int read()
throws java.io.IOException
Reading lots of data with read() from this input stream
may be inefficient. Wrap it in BufferedInputStream
if you need to read lots of data one byte at a time.
read in class java.io.InputStream-1
to indicate the end of the compressed streamCorruptedInputExceptionUnsupportedOptionsExceptionMemoryLimitExceptionXZIOException - if the stream has been closedjava.io.EOFException - compressed input is truncated or corruptjava.io.IOException - may be thrown by inpublic int read(byte[] buf,
int off,
int len)
throws java.io.IOException
If len is zero, no bytes are read and 0
is returned. Otherwise this will try to decompress len
bytes of uncompressed data. Less than len bytes may
be read only in the following situations:
len
bytes have already been successfully decompressed.
The next call with non-zero len will immediately
throw the pending exception.read in class java.io.InputStreambuf - target buffer for uncompressed dataoff - start offset in buflen - maximum number of uncompressed bytes to read-1 to indicate
the end of the compressed streamCorruptedInputExceptionUnsupportedOptionsExceptionMemoryLimitExceptionXZIOException - if the stream has been closedjava.io.EOFException - compressed input is truncated or corruptjava.io.IOException - may be thrown by inpublic int available()
throws java.io.IOException
CorruptedInputException may get
thrown before the number of bytes claimed to be available have
been read from this input stream.available in class java.io.InputStreamjava.io.IOExceptionpublic void close()
throws java.io.IOException
in.close().
If the stream was already closed, this does nothing.close in interface java.io.Closeableclose in interface java.lang.AutoCloseableclose in class java.io.InputStreamjava.io.IOException - if thrown by in.close()