public void CompressFiles() { var files = Directory.EnumerateFiles(@"..\..\..\Data"); foreach (var f in files) { var source = File.ReadAllBytes(f); var compressedData = Snappy.Compress(source); var decompressedData = Snappy.Decompress(compressedData, 0, compressedData.Length); Assert.True(decompressedData.SequenceEqual(source)); } }
/// <summary> /// 打包 /// </summary> /// <param name="packet">输入的协议对象</param> /// <returns>需要发送的字节流</returns> public ArraySegment <byte> Pack(object packet) { // offset // --------------------------------------------------------- // | 包头 | 包体(Count) | // --------------------------------------------------------- // | ArraySegment(包头+包体) | // --------------------------------------------------------- // 返回的ArraySegment,Offset为包头偏移位置,Count为包体长度 var msgInfo = msgDefined.GetMsgByName(packet.GetType().FullName); if (msgInfo == null) { throw new NotSupportedException("Can not find msg info , msg name is [" + packet.GetType().FullName + "]"); } var sent = new ArraySegment <byte>(sentBuffer, Header.HeadSize, sentBuffer.Length - Header.HeadSize); packerPolicy.Packed(ref sent, msgInfo, packet); var header = new Header { MsgId = msgInfo.Id, }; header.FillMsgId(sent); var datalen = sent.Count; var destbuff = sentBuffer; header.Encrypt = true; if (datalen >= 100) { //compress header.Compress = true; destbuff = compSentBuffer; datalen = Snappy.Compress(sent.Array, sent.Offset - 2, sent.Count + 2, compSentBuffer, Header.HeadSize - 2); //Debug.LogError("send data compressed pre count->" + sent.Count + " after->" + datalen); header.BodyLength = datalen; } else { header.BodyLength = datalen + 2; } sent = new ArraySegment <byte>(destbuff, 0, header.BodyLength + Header.HeadSize - 2); header.Fill(sent); XorEncrypt.Encrypt(destbuff, Header.HeadSize - 2, header.BodyLength); return(sent); }
public void CompressRandomData() { var r = new Random(); var rng = new RNGCryptoServiceProvider(); for (int i = 0; i < 10000; i++) { var data = new byte[r.Next(UInt16.MaxValue)]; rng.GetNonZeroBytes(data); var compressedData = Snappy.Compress(data); var decompressedData = Snappy.Decompress(compressedData, 0, compressedData.Length); Assert.True(decompressedData.SequenceEqual(data)); } }
public void LoadToMemory() { using var resource = typeof(DecompressAlice).Assembly.GetManifestResourceStream("Snappier.Benchmarks.TestData.alice29.txt"); var input = new byte[65536]; // Just test the first 64KB // ReSharper disable once PossibleNullReferenceException resource.Read(input); var compressed = new byte[Snappy.GetMaxCompressedLength(input.Length)]; var compressedLength = Snappy.Compress(input, compressed); _input = compressed.AsMemory(0, compressedLength); }
public void BadData_InsufficentOutputBuffer_ThrowsArgumentException() { var input = new byte[100000]; Array.Fill(input, (byte)'A'); var compressed = new byte[Snappy.GetMaxCompressedLength(input.Length)]; var compressedLength = Snappy.Compress(input, compressed); Assert.Throws <ArgumentException>(() => { var output = new byte[100]; Snappy.Decompress(compressed.AsSpan(0, compressedLength), output); }); }
public void BadData_LongLength_ThrowsInvalidDataException() { var input = new byte[1000]; Array.Fill(input, (byte)'A'); var compressed = new byte[Snappy.GetMaxCompressedLength(input.Length)]; var compressedLength = Snappy.Compress(input, compressed); var compressedSpan = compressed.AsSpan(0, compressedLength); // Set the length header to 16383 compressedSpan[0] = 255; compressedSpan[1] = 127; Assert.Throws <InvalidDataException>(() => { var output = new byte[1000]; Snappy.Decompress(compressed, output); }); }
public void BadData_SimpleCorruption_ThrowsInvalidDataException() { var input = Encoding.UTF8.GetBytes("making sure we don't crash with corrupted input"); var compressed = new byte[Snappy.GetMaxCompressedLength(input.Length)]; var compressedLength = Snappy.Compress(input, compressed); var compressedSpan = compressed.AsSpan(0, compressedLength); // corrupt the data a bit compressedSpan[1]--; compressedSpan[3]++; Assert.Throws <InvalidDataException>(() => { var length = Snappy.GetUncompressedLength(compressed.AsSpan(0, compressedLength)); Assert.InRange(length, 0, 1 << 20); var output = new byte[length]; Snappy.Decompress(compressed.AsSpan(0, compressedLength), output); }); }
public void CompressAndDecompressFile(string filename) { using var resource = typeof(SnappyTests).Assembly.GetManifestResourceStream($"Snappier.Tests.TestData.{filename}"); Assert.NotNull(resource); var input = new byte[resource.Length]; resource.Read(input); var compressed = new byte[Snappy.GetMaxCompressedLength(input.Length)]; var compressedLength = Snappy.Compress(input, compressed); var compressedSpan = compressed.AsSpan(0, compressedLength); var output = new byte[Snappy.GetUncompressedLength(compressedSpan)]; var outputLength = Snappy.Decompress(compressedSpan, output); Assert.Equal(input.Length, outputLength); Assert.Equal(input, output); }