Class SnappyCompressorOutputStream
- All Implemented Interfaces:
Closeable
,Flushable
,AutoCloseable
This implementation uses an internal buffer in order to handle the back-references that are at the heart of the LZ77 algorithm. The size of the buffer must be at least as big as the biggest offset used in the compressed stream. The current version of the Snappy algorithm as defined by Google works on 32k blocks and doesn't contain offsets bigger than 32k which is the default block size used by this class.
The raw Snappy format requires the uncompressed size to be written at the beginning of the stream using a varint representation, i.e. the number of bytes
needed to write the information is not known before the uncompressed size is known. We've chosen to make the uncompressedSize a parameter of the constructor
in favor of buffering the whole output until the size is known. When using the FramedSnappyCompressorOutputStream
this limitation is taken care of by
the warpping framing format.
- Since:
- 1.14
- See Also:
- This class is not thread-safe
-
Field Summary
Fields inherited from class java.io.FilterOutputStream
out
-
Constructor Summary
ConstructorDescriptionSnappyCompressorOutputStream
(OutputStream os, long uncompressedSize) Constructor using the default block size of 32k.SnappyCompressorOutputStream
(OutputStream os, long uncompressedSize, int blockSize) Constructor using a configurable block size.SnappyCompressorOutputStream
(OutputStream out, long uncompressedSize, Parameters params) Constructor providing full control over the underlying LZ77 compressor. -
Method Summary
Modifier and TypeMethodDescriptionvoid
close()
static Parameters.Builder
createParameterBuilder
(int blockSize) Returns a builder correctly configured for the Snappy algorithm using the gven block size.void
finish()
Compresses all remaining data and writes it to the stream, doesn't close the underlying stream.void
write
(byte[] data, int off, int len) void
write
(int b) Methods inherited from class org.apache.commons.compress.compressors.CompressorOutputStream
out
Methods inherited from class java.io.FilterOutputStream
flush, write
-
Constructor Details
-
SnappyCompressorOutputStream
Constructor using the default block size of 32k.- Parameters:
os
- the outputstream to write compressed data touncompressedSize
- the uncompressed size of data- Throws:
IOException
- if writing of the size fails
-
SnappyCompressorOutputStream
public SnappyCompressorOutputStream(OutputStream os, long uncompressedSize, int blockSize) throws IOException Constructor using a configurable block size.- Parameters:
os
- the outputstream to write compressed data touncompressedSize
- the uncompressed size of datablockSize
- the block size used - must be a power of two- Throws:
IOException
- if writing of the size fails
-
SnappyCompressorOutputStream
public SnappyCompressorOutputStream(OutputStream out, long uncompressedSize, Parameters params) throws IOException Constructor providing full control over the underlying LZ77 compressor.- Parameters:
out
- the outputstream to write compressed data touncompressedSize
- the uncompressed size of dataparams
- the parameters to use by the compressor - note that the format itself imposes some limits like a maximum match length of 64 bytes- Throws:
IOException
- if writing of the size fails
-
-
Method Details
-
createParameterBuilder
Returns a builder correctly configured for the Snappy algorithm using the gven block size.- Parameters:
blockSize
- the block size.- Returns:
- a builder correctly configured for the Snappy algorithm using the gven block size
-
close
- Specified by:
close
in interfaceAutoCloseable
- Specified by:
close
in interfaceCloseable
- Overrides:
close
in classFilterOutputStream
- Throws:
IOException
-
finish
Compresses all remaining data and writes it to the stream, doesn't close the underlying stream.- Throws:
IOException
- if an error occurs
-
write
- Overrides:
write
in classFilterOutputStream
- Throws:
IOException
-
write
- Overrides:
write
in classFilterOutputStream
- Throws:
IOException
-