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); }
/// <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)); }
private static int[] ReadLengthData(byte[] data) { var target = new SnappyDecompressor(); return(target.ReadUncompressedLength(data, 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);