public void round_trip_returns_original_data(string fileName)
        {
            byte[] uncompressed = File.ReadAllBytes(fileName);
            var target = new SnappyCompressor();
            var result = new byte[target.MaxCompressedLength(uncompressed.Length)];
            int size = target.Compress(uncompressed, 0, uncompressed.Length, result);


            var target2 = new SnappyDecompressor();
            var sizes = target2.ReadUncompressedLength(result, 0);
            var bytes = new byte[sizes[0]];
            target2.Decompress(result, 0 + sizes[1], size - sizes[1], bytes, 0, sizes[1]);

            Assert.Equal(uncompressed, bytes);
        }
        public void compress_random_data()
        {
            var data = GetRandomData(4096);
            var target = new SnappyCompressor();

            int compressedSize = target.MaxCompressedLength(data.Length);
            var compressed = new byte[compressedSize];

            int result = target.Compress(data, 0, data.Length, compressed);

            Assert.True(result < compressedSize); 

            var decomperssor = new SnappyDecompressor();
            var bytes = decomperssor.Decompress(compressed, 0, result);
            Assert.Equal(data, bytes);
        }
        public void compress_constant_data_is_one_literal_and_one_copy()
        {
            // 1024 a's
            var data = Encoding.Default.GetBytes("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"); 
            var target = new SnappyCompressor();

            int compressedSize = target.MaxCompressedLength(data.Length);
            var compressed = new byte[compressedSize];

            int result = target.Compress(data, 0, data.Length, compressed);

            Assert.Equal(50, result);

            var decompressor = new SnappyDecompressor();
            var bytes = decompressor.Decompress(compressed, 0, result);
            Assert.Equal(data, bytes);
        }
        public void compress_returns_bytes_copied()
        {
            var data = Encoding.Default.GetBytes("ThisThisThisThisThisThisThisThisThisThisThisThisThisThisThisThisThisThisThisThisThisThisThisThisThis"); 
            var target = new SnappyCompressor();

            int compressedSize = target.MaxCompressedLength(data.Length);
            var compressed = new byte[compressedSize];

            int result = target.Compress(data, 0, data.Length, compressed);

            Assert.True(result < compressedSize);
            Assert.Equal(15, result);

            // TODO: instead of decompressing, we should traverse the buffer looking for tag bytes and interpreting them.
            var decompressor = new SnappyDecompressor();
            var bytes = decompressor.Decompress(compressed, 0, result);
            Console.Write(Encoding.Default.GetString(bytes));
        }
 private static int[] ReadLengthData(byte[] data)
 {
     var target = new SnappyDecompressor();
     return target.ReadUncompressedLength(data, 0);
 }
Beispiel #6
0
        /// <summary>
        /// 使用snappy算法解压缩
        /// </summary>
        /// <param name="compressed"></param>
        /// <param name="offset"></param>
        /// <param name="length"></param>
        /// <returns></returns>
        public static byte[] DecompressInSnappy(byte[] compressed, int offset, int length)
        {
            SnappyDecompressor sd = new SnappyDecompressor();

            return(sd.Decompress(compressed, offset, length));
        }
        public void compress_writes_uncompressed_length_first(int dataSize, int storageBytes)
        {
            var data = GetRandomData(dataSize);
            var target = new SnappyCompressor();

            int compressedSize = target.MaxCompressedLength(data.Length);
            var compressed = new byte[compressedSize];

            target.Compress(data, 0, data.Length, compressed);

            var decompressor = new SnappyDecompressor();
            var result = decompressor.ReadUncompressedLength(compressed, 0);

            Assert.Equal(dataSize, result[0]);
            Assert.Equal(storageBytes, result[1]);
        }
        public void compress_multiple_blocks()
        {
            /*!
             * this ends up being uncompressible because it is random.
             */
            var rand = new Random().Next(1 << 4, 1 << 10);
            var data = GetRandomData((1 << 20) + rand); // 1MB  + a bit random so there is an uneven block at end.
            var target = new SnappyCompressor();

            int compressedSize = target.MaxCompressedLength(data.Length);
            var compressed = new byte[compressedSize];

            int result = target.Compress(data, 0, data.Length, compressed);

            Assert.True(result < compressedSize); 

            var decompressor = new SnappyDecompressor();
            var bytes = decompressor.Decompress(compressed, 0, result);
            Assert.Equal(data, bytes);
        }
 public byte[] Decompress(byte[] buffer)
 {
     return(SnappyDecompressor.Uncompress(buffer, 0, buffer.Length));
 }
Beispiel #10
0
        private static int[] ReadLengthData(byte[] data)
        {
            var target = new SnappyDecompressor();

            return(target.ReadUncompressedLength(data, 0));
        }
Beispiel #11
0
 /// <summary>
 /// Get the uncompressed data length from a compressed Snappy block.
 /// </summary>
 /// <param name="input">Compressed snappy block.</param>
 /// <returns>The length of the uncompressed data in the block.</returns>
 /// <exception cref="InvalidDataException">The data in <paramref name="input"/> has an invalid length.</exception>
 /// <remarks>
 /// This is useful for allocating a sufficient output buffer before calling <see cref="Decompress"/>.
 /// </remarks>
 public static int GetUncompressedLength(ReadOnlySpan <byte> input) =>
 SnappyDecompressor.ReadUncompressedLength(input);