public class XZOutputStream extends FinishableOutputStream
Getting an output stream to compress with LZMA2 using the default settings and the default integrity check type (CRC64):
FileOutputStream outfile = new FileOutputStream("foo.xz"); XZOutputStream outxz = new XZOutputStream(outfile, new LZMA2Options());
Using the preset level 8
for LZMA2 (the default
is 6
) and SHA-256 instead of CRC64 for integrity checking:
XZOutputStream outxz = new XZOutputStream(outfile, new LZMA2Options(8), XZ.CHECK_SHA256);
Using the x86 BCJ filter together with LZMA2 to compress x86 executables and printing the memory usage information before creating the XZOutputStream:
X86Options x86 = new X86Options(); LZMA2Options lzma2 = new LZMA2Options(); FilterOptions[] options = { x86, lzma2 }; System.out.println("Encoder memory usage: " + FilterOptions.getEncoderMemoryUsage(options) + " KiB"); System.out.println("Decoder memory usage: " + FilterOptions.getDecoderMemoryUsage(options) + " KiB"); XZOutputStream outxz = new XZOutputStream(outfile, options);
Constructor and Description |
---|
XZOutputStream(OutputStream out,
FilterOptions filterOptions)
Creates a new XZ compressor using one filter and CRC64 as
the integrity check.
|
XZOutputStream(OutputStream out,
FilterOptions[] filterOptions)
Creates a new XZ compressor using 1-4 filters and CRC64 as
the integrity check.
|
XZOutputStream(OutputStream out,
FilterOptions[] filterOptions,
int checkType)
Creates a new XZ compressor using 1-4 filters and the specified
integrity check type.
|
XZOutputStream(OutputStream out,
FilterOptions filterOptions,
int checkType)
Creates a new XZ compressor using one filter and the specified
integrity check type.
|
Modifier and Type | Method and Description |
---|---|
void |
close()
Finishes compression and closes the underlying stream.
|
void |
endBlock()
Finishes the current XZ Block (but not the whole XZ Stream).
|
void |
finish()
Finishes compression without closing the underlying stream.
|
void |
flush()
Flushes the encoder and calls
out.flush() . |
void |
updateFilters(FilterOptions filterOptions)
Updates the filter chain with a single filter.
|
void |
updateFilters(FilterOptions[] filterOptions)
Updates the filter chain with 1-4 filters.
|
void |
write(byte[] buf,
int off,
int len)
Writes an array of bytes to be compressed.
|
void |
write(int b)
Writes one byte to be compressed.
|
write
public XZOutputStream(OutputStream out, FilterOptions filterOptions) throws IOException
XZOutputStream(OutputStream, FilterOptions[])
.out
- output stream to which the compressed data
will be writtenfilterOptions
- filter options to useUnsupportedOptionsException
- invalid filter chainIOException
- may be thrown from out
public XZOutputStream(OutputStream out, FilterOptions filterOptions, int checkType) throws IOException
XZOutputStream(OutputStream, FilterOptions[], int)
.out
- output stream to which the compressed data
will be writtenfilterOptions
- filter options to usecheckType
- type of the integrity check,
for example XZ.CHECK_CRC32UnsupportedOptionsException
- invalid filter chainIOException
- may be thrown from out
public XZOutputStream(OutputStream out, FilterOptions[] filterOptions) throws IOException
XZOutputStream(out, filterOptions, XZ.CHECK_CRC64)
.out
- output stream to which the compressed data
will be writtenfilterOptions
- array of filter options to useUnsupportedOptionsException
- invalid filter chainIOException
- may be thrown from out
public XZOutputStream(OutputStream out, FilterOptions[] filterOptions, int checkType) throws IOException
out
- output stream to which the compressed data
will be writtenfilterOptions
- array of filter options to usecheckType
- type of the integrity check,
for example XZ.CHECK_CRC32UnsupportedOptionsException
- invalid filter chainIOException
- may be thrown from out
public void updateFilters(FilterOptions filterOptions) throws XZIOException
updateFilters(FilterOptions[])
.filterOptions
- new filter to useUnsupportedOptionsException
- unsupported filter chain, or trying to change
the filter chain in the middle of a BlockXZIOException
public void updateFilters(FilterOptions[] filterOptions) throws XZIOException
Currently this cannot be used to update e.g. LZMA2 options in the
middle of a XZ Block. Use endBlock()
to finish the
current XZ Block before calling this function. The new filter chain
will then be used for the next XZ Block.
filterOptions
- new filter chain to useUnsupportedOptionsException
- unsupported filter chain, or trying to change
the filter chain in the middle of a BlockXZIOException
public void write(int b) throws IOException
write
in class OutputStream
XZIOException
- XZ Stream has grown too bigXZIOException
- finish()
or close()
was already calledIOException
- may be thrown by the underlying output streampublic void write(byte[] buf, int off, int len) throws IOException
flush()
to force everything written so far to
be written to the underlaying output stream, but be aware that
flushing reduces compression ratio.write
in class OutputStream
buf
- buffer of bytes to be writtenoff
- start offset in buf
len
- number of bytes to writeXZIOException
- XZ Stream has grown too big: total file size
about 8 EiB or the Index field exceeds
16 GiB; you shouldn't reach these sizes
in practiceXZIOException
- finish()
or close()
was already called and len > 0IOException
- may be thrown by the underlying output streampublic void endBlock() throws IOException
flush()
if flushing is wanted in addition to
finishing the current XZ Block.
If there is no unfinished Block open, this function will do nothing. (No empty XZ Block will be created.)
This function can be useful, for example, to create random-accessible .xz files.
Starting a new XZ Block means that the encoder state is reset.
Doing this very often will increase the size of the compressed
file a lot (more than plain flush()
would do).
XZIOException
- XZ Stream has grown too bigXZIOException
- stream finished or closedIOException
- may be thrown by the underlying output streampublic void flush() throws IOException
out.flush()
.
All buffered pending data will then be decompressible from
the output stream.
Calling this function very often may increase the compressed file size a lot. The filter chain options may affect the size increase too. For example, with LZMA2 the HC4 match finder has smaller penalty with flushing than BT4.
Some filters don't support flushing. If the filter chain has
such a filter, flush()
will call endBlock()
before flushing.
flush
in interface Flushable
flush
in class OutputStream
XZIOException
- XZ Stream has grown too bigXZIOException
- stream finished or closedIOException
- may be thrown by the underlying output streampublic void finish() throws IOException
write
with an empty buffer is OK).
Repeated calls to finish()
do nothing unless
an exception was thrown by this stream earlier. In that case
the same exception is thrown again.
After finishing, the stream may be closed normally with
close()
. If the stream will be closed anyway, there
usually is no need to call finish()
separately.
finish
in class FinishableOutputStream
XZIOException
- XZ Stream has grown too bigIOException
- may be thrown by the underlying output streampublic void close() throws IOException
out
is closed even if finishing
fails. If both finishing and closing fail, the exception thrown
by finish()
is thrown and the exception from the failed
out.close()
is lost.close
in interface Closeable
close
in interface AutoCloseable
close
in class OutputStream
XZIOException
- XZ Stream has grown too bigIOException
- may be thrown by the underlying output streamCopyright © 2016 Internet2. All rights reserved.