public void NativeLZ4() { byte[] buffer = _srcFileBytesDict[DecompMethod.NativeLZ4]; using (MemoryStream decompMs = new MemoryStream((int)_magicFileLen)) using (MemoryStream compMs = new MemoryStream(buffer)) { using (LZ4FrameStream ls = new LZ4FrameStream(compMs, new LZ4FrameDecompressOptions())) { ls.CopyTo(decompMs); } } }
private static void DecompressTemplate(string lz4FileName, string originFileName, bool useSpan) { byte[] decompDigest; byte[] originDigest; LZ4FrameDecompressOptions decompOpts = new LZ4FrameDecompressOptions(); string lz4File = Path.Combine(TestSetup.SampleDir, lz4FileName); string originFile = Path.Combine(TestSetup.SampleDir, originFileName); using (MemoryStream decompMs = new MemoryStream()) { using (FileStream compFs = new FileStream(lz4File, FileMode.Open, FileAccess.Read, FileShare.Read)) using (LZ4FrameStream lzs = new LZ4FrameStream(compFs, decompOpts)) { #if !NETFRAMEWORK if (useSpan) { byte[] buffer = new byte[64 * 1024]; int bytesRead; do { bytesRead = lzs.Read(buffer.AsSpan()); decompMs.Write(buffer.AsSpan(0, bytesRead)); } while (0 < bytesRead); } else #endif { lzs.CopyTo(decompMs); } decompMs.Flush(); Assert.AreEqual(compFs.Length, lzs.TotalIn); Assert.AreEqual(decompMs.Length, lzs.TotalOut); } decompMs.Position = 0; decompDigest = TestHelper.SHA256Digest(decompMs); } using (FileStream originFs = new FileStream(originFile, FileMode.Open, FileAccess.Read, FileShare.Read)) { originDigest = TestHelper.SHA256Digest(originFs); } Assert.IsTrue(decompDigest.SequenceEqual(originDigest)); }
private static void CompressTemplate(string sampleFileName, LZ4CompLevel compLevel, bool autoFlush, bool enableContentSize, bool useSpan) { if (sampleFileName == null) { throw new ArgumentNullException(nameof(sampleFileName)); } string destDir = Path.GetTempFileName(); File.Delete(destDir); Directory.CreateDirectory(destDir); try { string tempDecompFile = Path.Combine(destDir, Path.GetFileName(sampleFileName)); string tempLz4File = tempDecompFile + ".lz4"; string sampleFile = Path.Combine(TestSetup.SampleDir, sampleFileName); using (FileStream sampleFs = new FileStream(sampleFile, FileMode.Open, FileAccess.Read, FileShare.Read)) { LZ4FrameCompressOptions compOpts = new LZ4FrameCompressOptions() { Level = compLevel, AutoFlush = autoFlush, LeaveOpen = true, }; if (enableContentSize) { compOpts.ContentSize = (ulong)sampleFs.Length; } using (FileStream lz4CompFs = new FileStream(tempLz4File, FileMode.Create, FileAccess.Write, FileShare.None)) using (LZ4FrameStream lzs = new LZ4FrameStream(lz4CompFs, compOpts)) { #if !NETFRAMEWORK if (useSpan) { byte[] buffer = new byte[64 * 1024]; int bytesRead; do { bytesRead = sampleFs.Read(buffer.AsSpan()); lzs.Write(buffer.AsSpan(0, bytesRead)); } while (0 < bytesRead); } else #endif { sampleFs.CopyTo(lzs); } lzs.Flush(); Assert.AreEqual(sampleFs.Length, lzs.TotalIn); Assert.AreEqual(lz4CompFs.Length, lzs.TotalOut); } } Assert.IsTrue(TestHelper.RunLZ4(tempLz4File, tempDecompFile) == 0); byte[] decompDigest; byte[] originDigest; using (FileStream fs = new FileStream(sampleFile, FileMode.Open, FileAccess.Read, FileShare.Read)) { originDigest = TestHelper.SHA256Digest(fs); } using (FileStream fs = new FileStream(tempDecompFile, FileMode.Open, FileAccess.Read, FileShare.Read)) { decompDigest = TestHelper.SHA256Digest(fs); } Assert.IsTrue(originDigest.SequenceEqual(decompDigest)); } finally { if (Directory.Exists(destDir)) { Directory.Delete(destDir, true); } } }