public void Write(EndianBinaryWriter writer) { var decMemStream = new MemoryStream(); var decWriter = new EndianBinaryWriter(decMemStream); decWriter.Write(Literals.Length); foreach (var literal in Literals) { decWriter.SeekNext(4); //uint size var oldPos = decWriter.Position; BeamTerm.TermToBinary(decWriter, literal); var len = (uint)(decWriter.Position - oldPos); decWriter.SeekBack((int)(len + 4)); decWriter.Write(len); decWriter.SeekNext((int)len); } decMemStream.Position = 0; var decBytes = decMemStream.ToArray(); writer.Write(decBytes.Length); var encBytes = ZLibCompressor.Compress(decBytes); writer.Write(encBytes); }
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_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> /// Compresses the specified input in /// </summary> public static int CompressInZLibFormat(byte[] input, out byte[] output) { byte[] compressed = ZLibCompressor.Compress(input, CompressionLevel.Level1); int compressedLength = compressed.Length; int uncompressedLength = input.Length; output = new byte[compressedLength + 4]; output[0] = (byte)uncompressedLength; output[1] = (byte)(uncompressedLength >> 8); output[2] = (byte)(uncompressedLength >> 16); output[3] = (byte)(uncompressedLength >> 24); Array.Copy(compressed, 0, output, 4, compressedLength); return(output.Length); }
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); }
/// <summary>Сжимает массив</summary> /// <param name="data">Входной массив.</param> /// <returns>Сжатый массив</returns> public static byte[] Compress(byte[] data) { return(ZLibCompressor.Compress(data)); }
/// <summary> /// 将录制的数据写入wav文件 改写为UDP发送 /// </summary> private void RecordCapturedData(Socket Client, EndPoint epserver) { byte[] CaptureData = null; byte[] SendData = null; int ReadPos = 0; int CapturePos = 0; int LockSize = 0; mRecBuffer.GetCurrentPosition(out CapturePos, out ReadPos); LockSize = ReadPos - mNextCaptureOffset; if (LockSize < 0) { LockSize += mBufferSize; } // 对齐缓冲区边界,实际上由于开始设定完整,这个操作是多余的. LockSize -= (LockSize % mNotifySize); if (0 == LockSize) { return; } // 读取缓冲区内的数据 CaptureData = (byte[])mRecBuffer.Read(mNextCaptureOffset, typeof(byte), LockFlag.None, LockSize); // 更新已经录制的数据长度. mSampleCount += CaptureData.Length; //压缩数据,实测压缩率在50%左右 SendData = ZLibCompressor.Compress(CaptureData); // 写入Wav文件 ,在这里改成发送 // mWriter.Write(SendData, 0, SendData.Length); // mWriter.Write(CaptureData, 0, CaptureData.Length); //发送文件到网络 try { Client.SendTo(SendData, epServer);//传送语音 } catch (Exception e) { MessageBox.Show(e.Message, "错误"); } // 移动录制数据的起始点,通知消息只负责指示产生消息的位置,并不记录上次录制的位置 mNextCaptureOffset += CaptureData.Length; mNextCaptureOffset %= mBufferSize; // Circular buffer }