Class Lz4Decompressor

  • All Implemented Interfaces:
    Decompressor, AutoCloseable

    public final class Lz4Decompressor
    extends Object
    implements Decompressor
    Uncompresses a Buffer encoded with 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 Detail

      • newFactory

        public static Supplier<Lz4Decompressor> newFactory()
        Creates the fastest LZ4 decompressor factory. Note that by default, validation of the checksum header in each chunk is DISABLED for performance improvements. If performance is less of an issue, or if you would prefer the safety that checksum validation brings, please use the newFactory(boolean) constructor with the argument set to true.
        Returns:
        the factory.
      • newFactory

        public static Supplier<Lz4Decompressor> newFactory​(boolean validateChecksums)
        Creates a LZ4 decompressor factory with fastest decoder instance available on your machine.
        Parameters:
        validateChecksums - if true, the checksum field will be validated against the actual uncompressed data, and if the checksums do not match, a suitable DecompressionException will be thrown
        Returns:
        the factory.
      • newFactory

        public static Supplier<Lz4Decompressor> newFactory​(net.jpountz.lz4.LZ4Factory factory,
                                                           boolean validateChecksums)
        Creates a LZ4 decompressor factory with customizable implementation.
        Parameters:
        factory - user customizable LZ4Factory instance which may be JNI bindings to the original C implementation, a pure Java implementation or a Java implementation that uses the Unsafe
        validateChecksums - if true, the checksum field will be validated against the actual uncompressed data, and if the checksums do not match, a suitable DecompressionException will be thrown. In this case encoder will use xxhash hashing for Java, based on Yann Collet's work available at Github.
        Returns:
        the factory.
      • newFactory

        public static Supplier<Lz4Decompressor> newFactory​(net.jpountz.lz4.LZ4Factory factory,
                                                           Checksum checksum)
        Creates a customizable LZ4 decompressor factory.
        Parameters:
        factory - user customizable LZ4Factory instance which may be JNI bindings to the original C implementation, a pure Java implementation or a Java implementation that uses the Unsafe
        checksum - the Checksum instance to use to check data for integrity. You may set null if you do not want to validate checksum of each block
        Returns:
        the factory.
      • decompress

        public Buffer decompress​(Buffer in,
                                 BufferAllocator allocator)
                          throws DecompressionException
        Description copied from interface: Decompressor
        This method will read from the input Buffer and decompress into a new Buffer that will be allocated (if needed) from the BufferAllocator. If there is not enough readable data in the Buffer to process it will return null. This method should be called in a loop as long:
        • something was read from the input
          something was returned
      • Otherwise this method should be called again once there is more data in the input buffer.
Specified by:
decompress in interface Decompressor
Parameters:
in - the Buffer that contains the data to be decompressed.
allocator - the BufferAllocator that is used to allocate a new buffer (if needed) to write the decompressed bytes too.
Returns:
the Buffer that contains the decompressed data. The caller of this method takes ownership of the buffer. The return value will be null if there is not enough data readable in the input to make any progress. In this case the user should call it again once there is more data ready to be consumed.
Throws:
DecompressionException - thrown if an decompression error was encountered or the decompressor was closed before.