private static byte[] EncodeBlock(byte[] input, int topupSize, int blockSize)
        {
            using (var outputStream = new MemoryStream())
                using (var inputStream = new MemoryStream(input))
                {
                    using (var inputReader = new BinaryReader(inputStream, Encoding.UTF8, false))
                        using (var outputWriter = new BinaryWriter(outputStream, Encoding.UTF8, true))
                            using (var encoder = new LZ4BlockEncoder(LZ4Level.L00_FAST, blockSize))
                            {
                                var inputBuffer  = new byte[topupSize];
                                var outputBuffer = new byte[LZ4Codec.MaximumOutputSize(encoder.BlockSize)];

                                while (true)
                                {
                                    var bytes = inputReader.Read(inputBuffer, 0, inputBuffer.Length);

                                    if (bytes == 0)
                                    {
                                        Flush(outputWriter, encoder, outputBuffer);
                                        outputWriter.Write(-1);
                                        break;
                                    }

                                    Write(outputWriter, encoder, inputBuffer, bytes, outputBuffer);
                                }
                            }

                    return(outputStream.ToArray());
                }
        }
 public Lz4CompressionEncoder(int bufferSize, int blockSize)
     : base(bufferSize)
 {
     _encoder          = new LZ4BlockEncoder(LZ4Level.L10_OPT, blockSize);
     _compressedBuffer = new byte[LZ4Codec.MaximumOutputSize(blockSize)];
 }