public static BeamLiteralsChunk Read(EndianBinaryReader reader, uint size) { var decSize = reader.ReadUInt32(); var encBytes = reader.ReadBytes((int)size - 4); //-decSize size var decBytes = ZLibCompressor.Decompress(encBytes); if (decBytes.Length != decSize) { throw new ReadBytesCountException(decBytes.Length, (int)decSize); } var decReader = new EndianBinaryReader(new MemoryStream(decBytes)); var litCount = decReader.ReadUInt32(); var literals = new IExtTerm[litCount]; for (uint i = 0; i < litCount; i++) { var litSize = decReader.ReadUInt32(); var oldPos = decReader.Position; literals[i] = BeamTerm.BinaryToTerm(decReader); var newPos = decReader.Position; if (oldPos + litSize != newPos) { throw new Exception(); } } return(new BeamLiteralsChunk() { Literals = literals }); }
public void ZLibCompressStreamTest() { ZLibCompressor target = new ZLibCompressor(); string originalText = "Test string."; MemoryStream msOriginal = new MemoryStream(ASCIIEncoding.ASCII.GetBytes(originalText)); byte[] compressbuffer = new byte[2000]; MemoryStream msCompressed = new MemoryStream(compressbuffer); int outLen = 0; ZLibError err = target.Compress(msOriginal, msCompressed, ref outLen, ZLibQuality.Default); Assert.AreEqual(ZLibError.Okay, err); MemoryStream msToDecompress = new MemoryStream(compressbuffer, 0, outLen); byte[] decompressbuffer = new byte[2000]; MemoryStream msFinalResult = new MemoryStream(decompressbuffer); err = target.Decompress(msToDecompress, msFinalResult, ref outLen); Assert.AreEqual(ZLibError.Okay, err); string result = ASCIIEncoding.ASCII.GetString(decompressbuffer, 0, outLen); Assert.AreEqual(originalText, result); }
public void ZLibStream_Decompressor_2() { byte[] input = new byte[] { 0x78, 0x9C, 0x73, 0x74, 0x72, 0x76, 0x71, 0x75, 0x03, 0x00, 0x05, 0x7E, 0x01, 0x96 }; byte[] plaintext = Encoding.UTF8.GetBytes("ABCDEF"); byte[] decompBytes = ZLibCompressor.Decompress(input); Assert.IsTrue(decompBytes.SequenceEqual(plaintext)); }
public void ZLibStream_Compressor_2() { byte[] input = Encoding.UTF8.GetBytes("ABCDEF"); // Compress first, // 78-9C-73-74-72-76-71-75-03-00-05-7E-01-96 byte[] compBytes = ZLibCompressor.Compress(input); // then Decompress. byte[] decompBytes = ZLibCompressor.Decompress(compBytes); // Comprare SHA256 Digest byte[] inputDigest = TestSetup.SHA256Digest(input); byte[] decompDigest = TestSetup.SHA256Digest(decompBytes); Assert.IsTrue(decompDigest.SequenceEqual(inputDigest)); }
/// <summary> /// Decompresses the specified input in my sql format. /// </summary> public static int DecompressInMySQLFormat(byte[] input, int length, out byte[] output) { int decompressedLength = input[0] | (input[1] << 8) | (input[2] << 16) | (input[3] << 24); using (MemoryStream inputStream = new MemoryStream(input, 4, input.Length - 4)) { using (MemoryStream outputStream = ZLibCompressor.Decompress(inputStream)) { byte[] decompressedByteArray = outputStream.ToArray(); if (decompressedByteArray.Length != decompressedLength) { Debugger.Error("ZLibHelper::decompressInMySQLFormat decompressed byte array is corrupted"); } output = decompressedByteArray; } } return(decompressedLength); }
public void ZLibStream_Decompressor_1() { void Template(string fileName) { string compPath = Path.Combine(TestSetup.SampleDir, fileName + ".zz"); string decompPath = Path.Combine(TestSetup.SampleDir, fileName); using (FileStream decompFs = new FileStream(decompPath, FileMode.Open, FileAccess.Read, FileShare.Read)) using (FileStream compFs = new FileStream(compPath, FileMode.Open, FileAccess.Read, FileShare.Read)) using (MemoryStream decompMs = ZLibCompressor.Decompress(compFs)) { // Compare SHA256 Digest byte[] fileDigest = TestSetup.SHA256Digest(decompFs); byte[] decompDigest = TestSetup.SHA256Digest(decompMs); Assert.IsTrue(decompDigest.SequenceEqual(fileDigest)); } } Template("ex1.jpg"); Template("ex2.jpg"); Template("ex3.jpg"); }
public void ZLibStream_Compressor_1() { void Template(string fileName, ZLibCompLevel level) { string filePath = Path.Combine(TestSetup.SampleDir, fileName); using (FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.Read)) using (MemoryStream compMs = ZLibCompressor.Compress(fs)) using (MemoryStream decompMs = ZLibCompressor.Decompress(compMs)) { // Compare SHA256 Digest fs.Position = 0; byte[] fileDigest = TestSetup.SHA256Digest(fs); byte[] decompDigest = TestSetup.SHA256Digest(decompMs); Assert.IsTrue(decompDigest.SequenceEqual(fileDigest)); } } Template("ex1.jpg", ZLibCompLevel.Default); Template("ex2.jpg", ZLibCompLevel.BestCompression); Template("ex3.jpg", ZLibCompLevel.BestSpeed); }