Class Lz4FrameEncoder

  • All Implemented Interfaces:
    io.netty.channel.ChannelHandler, io.netty.channel.ChannelOutboundHandler

    public class Lz4FrameEncoder
    extends io.netty.handler.codec.MessageToByteEncoder<io.netty.buffer.ByteBuf>
    Compresses a ByteBuf using 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 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
    • Nested Class Summary

      • Nested classes/interfaces inherited from interface io.netty.channel.ChannelHandler

        io.netty.channel.ChannelHandler.Sharable
    • Constructor Summary

      Constructors 
      Constructor Description
      Lz4FrameEncoder()
      Creates the fastest LZ4 encoder with default block size (64 KB) and xxhash hashing for Java, based on Yann Collet's work available at Github.
      Lz4FrameEncoder​(boolean highCompressor)
      Creates a new LZ4 encoder with hight or fast compression, default block size (64 KB) and xxhash hashing for Java, based on Yann Collet's work available at Github.
      Lz4FrameEncoder​(net.jpountz.lz4.LZ4Factory factory, boolean highCompressor, int blockSize, Checksum checksum)
      Creates a new customizable LZ4 encoder.
      Lz4FrameEncoder​(net.jpountz.lz4.LZ4Factory factory, boolean highCompressor, int blockSize, Checksum checksum, int maxEncodeSize)
      Creates a new customizable LZ4 encoder.
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      protected io.netty.buffer.ByteBuf allocateBuffer​(io.netty.channel.ChannelHandlerContext ctx, io.netty.buffer.ByteBuf msg, boolean preferDirect)  
      io.netty.channel.ChannelFuture close()
      Close this Lz4FrameEncoder and so finish the encoding.
      void close​(io.netty.channel.ChannelHandlerContext ctx, io.netty.channel.ChannelPromise promise)  
      io.netty.channel.ChannelFuture close​(io.netty.channel.ChannelPromise promise)
      Close this Lz4FrameEncoder and so finish the encoding.
      protected void encode​(io.netty.channel.ChannelHandlerContext ctx, io.netty.buffer.ByteBuf in, io.netty.buffer.ByteBuf out)
      Encodes the input buffer into blockSize chunks in the output buffer.
      void flush​(io.netty.channel.ChannelHandlerContext ctx)  
      void handlerAdded​(io.netty.channel.ChannelHandlerContext ctx)  
      void handlerRemoved​(io.netty.channel.ChannelHandlerContext ctx)  
      boolean isClosed()
      Returns true if and only if the compressed stream has been finished.
      • Methods inherited from class io.netty.handler.codec.MessageToByteEncoder

        acceptOutboundMessage, isPreferDirect, write
      • Methods inherited from class io.netty.channel.ChannelOutboundHandlerAdapter

        bind, connect, deregister, disconnect, read
      • Methods inherited from class io.netty.channel.ChannelHandlerAdapter

        ensureNotSharable, exceptionCaught, isSharable
      • Methods inherited from interface io.netty.channel.ChannelHandler

        exceptionCaught
    • Constructor Detail

      • Lz4FrameEncoder

        public Lz4FrameEncoder()
        Creates the fastest LZ4 encoder with default block size (64 KB) and xxhash hashing for Java, based on Yann Collet's work available at Github.
      • Lz4FrameEncoder

        public Lz4FrameEncoder​(boolean highCompressor)
        Creates a new LZ4 encoder with hight or fast compression, default block size (64 KB) and xxhash hashing for Java, based on Yann Collet's work available at Github.
        Parameters:
        highCompressor - if true codec will use compressor which requires more memory and is slower but compresses more efficiently
      • Lz4FrameEncoder

        public Lz4FrameEncoder​(net.jpountz.lz4.LZ4Factory factory,
                               boolean highCompressor,
                               int blockSize,
                               Checksum checksum)
        Creates a new customizable LZ4 encoder.
        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
        highCompressor - if true codec will use compressor which requires more memory and is slower but compresses more efficiently
        blockSize - the maximum number of bytes to try to compress at once, must be >= 64 and <= 32 M
        checksum - the Checksum instance to use to check data for integrity
      • Lz4FrameEncoder

        public Lz4FrameEncoder​(net.jpountz.lz4.LZ4Factory factory,
                               boolean highCompressor,
                               int blockSize,
                               Checksum checksum,
                               int maxEncodeSize)
        Creates a new customizable LZ4 encoder.
        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
        highCompressor - if true codec will use compressor which requires more memory and is slower but compresses more efficiently
        blockSize - the maximum number of bytes to try to compress at once, must be >= 64 and <= 32 M
        checksum - the Checksum instance to use to check data for integrity
        maxEncodeSize - the maximum size for an encode (compressed) buffer
    • Method Detail

      • allocateBuffer

        protected io.netty.buffer.ByteBuf allocateBuffer​(io.netty.channel.ChannelHandlerContext ctx,
                                                         io.netty.buffer.ByteBuf msg,
                                                         boolean preferDirect)
        Overrides:
        allocateBuffer in class io.netty.handler.codec.MessageToByteEncoder<io.netty.buffer.ByteBuf>
      • encode

        protected void encode​(io.netty.channel.ChannelHandlerContext ctx,
                              io.netty.buffer.ByteBuf in,
                              io.netty.buffer.ByteBuf out)
                       throws Exception
        Encodes the input buffer into blockSize chunks in the output buffer. Data is only compressed and written once we hit the blockSize; else, it is copied into the backing buffer to await more data.
        Specified by:
        encode in class io.netty.handler.codec.MessageToByteEncoder<io.netty.buffer.ByteBuf>
        Throws:
        Exception
      • flush

        public void flush​(io.netty.channel.ChannelHandlerContext ctx)
                   throws Exception
        Specified by:
        flush in interface io.netty.channel.ChannelOutboundHandler
        Overrides:
        flush in class io.netty.channel.ChannelOutboundHandlerAdapter
        Throws:
        Exception
      • isClosed

        public boolean isClosed()
        Returns true if and only if the compressed stream has been finished.
      • close

        public io.netty.channel.ChannelFuture close()
        Close this Lz4FrameEncoder and so finish the encoding. The returned ChannelFuture will be notified once the operation completes.
      • close

        public io.netty.channel.ChannelFuture close​(io.netty.channel.ChannelPromise promise)
        Close this Lz4FrameEncoder and so finish the encoding. The given ChannelFuture will be notified once the operation completes and will also be returned.
      • close

        public void close​(io.netty.channel.ChannelHandlerContext ctx,
                          io.netty.channel.ChannelPromise promise)
                   throws Exception
        Specified by:
        close in interface io.netty.channel.ChannelOutboundHandler
        Overrides:
        close in class io.netty.channel.ChannelOutboundHandlerAdapter
        Throws:
        Exception
      • handlerAdded

        public void handlerAdded​(io.netty.channel.ChannelHandlerContext ctx)
        Specified by:
        handlerAdded in interface io.netty.channel.ChannelHandler
        Overrides:
        handlerAdded in class io.netty.channel.ChannelHandlerAdapter
      • handlerRemoved

        public void handlerRemoved​(io.netty.channel.ChannelHandlerContext ctx)
                            throws Exception
        Specified by:
        handlerRemoved in interface io.netty.channel.ChannelHandler
        Overrides:
        handlerRemoved in class io.netty.channel.ChannelHandlerAdapter
        Throws:
        Exception