- java.lang.Object
-
- io.netty5.handler.codec.compression.Lz4Compressor
-
- All Implemented Interfaces:
Compressor,AutoCloseable
public final class Lz4Compressor extends Object implements Compressor
Compresses aBufferusing the LZ4 format. See original LZ4 Github project and LZ4 block format for full description. Since the original LZ4 block format does not contains size of compressed block and size of original data this encoder uses format like LZ4 Java library written by Adrien Grand and approved by Yann Collet (author of original LZ4 library). * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Magic * Token * Compressed * Decompressed * Checksum * + * LZ4 compressed * * * * length * length * * * block * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
-
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description voidclose()# Close the compressor.Buffercompress(Buffer input, BufferAllocator allocator)This method will read from the inputBufferand compress into a newBufferthat will be allocated (if needed) from theBufferAllocator.Bufferfinish(BufferAllocator allocator)By calling this method we signal that the compression stream is marked as finish.booleanisClosed()Returntrueif the decompressor was closed,falseotherwise.booleanisFinished()Returns true if the compressor was finished or closed.static Supplier<Lz4Compressor>newFactory()Creates the fastest LZ4 compressor factory with default block size (64 KB) and xxhash hashing for Java, based on Yann Collet's work available at Github.static Supplier<Lz4Compressor>newFactory(boolean highCompressor)Creates a new LZ4 compressor factory with high or fast compression, default block size (64 KB) and xxhash hashing for Java, based on Yann Collet's work available at Github.static Supplier<Lz4Compressor>newFactory(net.jpountz.lz4.LZ4Factory factory, boolean highCompressor, int blockSize, Checksum checksum)Creates a new customizable LZ4 compressor factory.static Supplier<Lz4Compressor>newFactory(net.jpountz.lz4.LZ4Factory factory, boolean highCompressor, int blockSize, Checksum checksum, int maxEncodeSize)Creates a new customizable LZ4 compressor factory.
-
-
-
Method Detail
-
newFactory
public static Supplier<Lz4Compressor> newFactory()
Creates the fastest LZ4 compressor factory with default block size (64 KB) and xxhash hashing for Java, based on Yann Collet's work available at Github.
-
newFactory
public static Supplier<Lz4Compressor> newFactory(boolean highCompressor)
Creates a new LZ4 compressor factory with high or fast compression, default block size (64 KB) and xxhash hashing for Java, based on Yann Collet's work available at Github.- Parameters:
highCompressor- iftruecodec will use compressor which requires more memory and is slower but compresses more efficiently- Returns:
- the factory.
-
newFactory
public static Supplier<Lz4Compressor> newFactory(net.jpountz.lz4.LZ4Factory factory, boolean highCompressor, int blockSize, Checksum checksum)
Creates a new customizable LZ4 compressor factory.- Parameters:
factory- user customizableLZ4Factoryinstance which may be JNI bindings to the original C implementation, a pure Java implementation or a Java implementation that uses theUnsafehighCompressor- iftruecodec will use compressor which requires more memory and is slower but compresses more efficientlyblockSize- the maximum number of bytes to try to compress at once, must be >= 64 and <= 32 Mchecksum- theChecksuminstance to use to check data for integrity- Returns:
- the factory.
-
newFactory
public static Supplier<Lz4Compressor> newFactory(net.jpountz.lz4.LZ4Factory factory, boolean highCompressor, int blockSize, Checksum checksum, int maxEncodeSize)
Creates a new customizable LZ4 compressor factory.- Parameters:
factory- user customizableLZ4Factoryinstance which may be JNI bindings to the original C implementation, a pure Java implementation or a Java implementation that uses theUnsafehighCompressor- iftruecodec will use compressor which requires more memory and is slower but compresses more efficientlyblockSize- the maximum number of bytes to try to compress at once, must be >= 64 and <= 32 Mchecksum- theChecksuminstance to use to check data for integritymaxEncodeSize- the maximum size for an encode (compressed) buffer- Returns:
- the factory.
-
compress
public Buffer compress(Buffer input, BufferAllocator allocator) throws CompressionException
Description copied from interface:CompressorThis method will read from the inputBufferand compress into a newBufferthat will be allocated (if needed) from theBufferAllocator. This method is expected to consume all data from the input but not take ownership. The caller is responsible to release the input buffer after this method returns.- Specified by:
compressin interfaceCompressor- Parameters:
input- theBufferthat contains the data to be compressed.allocator- theBufferAllocatorthat is used to allocate a new buffer (if needed) to write the compressed bytes too.- Returns:
- the
Bufferthat contains the compressed data. The caller of this method takes ownership of the buffer. The return value will never benull. - Throws:
CompressionException- thrown if an compression error was encountered or the compressor was closed already.
-
finish
public Buffer finish(BufferAllocator allocator)
Description copied from interface:CompressorBy calling this method we signal that the compression stream is marked as finish. The returnedBuffermight contain a "trailer" which marks the end of the stream.- Specified by:
finishin interfaceCompressor- Returns:
- the
Bufferwhich represent the end of the compression stream, which might be empty if the compressor don't need a trailer to signal the end. The caller of this method takes ownership of the buffer. The return value will never benull.
-
isFinished
public boolean isFinished()
Description copied from interface:CompressorReturns true if the compressor was finished or closed. This might happen because someone explicit calledCompressor.finish(BufferAllocator)/Compressor.close()or the compressor implementation did decide to close itself due a compression error which can't be recovered. AfterCompressor.isFinished()returnstruetheCompressor.compress(Buffer, BufferAllocator)method will just return an empty buffer without consuming anything from its input buffer.- Specified by:
isFinishedin interfaceCompressor- Returns:
trueif the compressor was marked as finished,falseotherwise.
-
isClosed
public boolean isClosed()
Description copied from interface:CompressorReturntrueif the decompressor was closed,falseotherwise.- Specified by:
isClosedin interfaceCompressor- Returns:
trueif the decompressor was closed,falseotherwise.
-
close
public void close()
Description copied from interface:Compressor# Close the compressor. After this method was calledCompressor.isFinished()will returntrueas well and it is not allowed to callCompressor.compress(Buffer, BufferAllocator)orCompressor.finish(BufferAllocator)anymore -- Specified by:
closein interfaceAutoCloseable- Specified by:
closein interfaceCompressor
-
-