我想压缩一些数据,所以我想我应该通过deflate来运行流
它从304字节增加到578字节。这是1.9倍大。我在试着压缩它……我在这里做错了什么?
using (MemoryStream ms2 = new MemoryStream())
using (var ms = new DeflateStream(ms2, CompressionMode.Compress, true))
{
ms.WriteByte(1);
ms.WriteShort((short)txtbuf.Length);
ms.Write(txtbuf, 0, txtbuf.Length);
ms.WriteShort((short)buf2.Length);
ms.Write(buf2, 0, buf2.Length);
ms.WriteShort((short)buf3.Length);
ms.Write(buf3, 0, buf3.Length);
ms.Flush();
result_buf = ms2.ToArray();
}发布于 2012-07-14 23:29:20
数据扩展的程度是DeflateStream类中的一个错误。该错误也存在于GZipStream类中。请看我对这个问题的描述:Why does my C# gzip produce a larger file than Fiddler or PHP?。
不要使用微软提供的DeflateStream类。请改用DotNetZip,它提供了替换类。
当您尝试压缩不可压缩数据时,它将略微扩展,但仅扩展很小的量。来自正确写入的放气压缩器的最大扩展是5个字节加上百分之一的一小部分。zlib对不可压缩数据的扩展(默认设置为raw deflate)是5字节+输入大小的0.03%。如果您的304字节是不可压缩的,则应该从原始deflate压缩器(如DeflateStream )中输出309字节。长度超过5或6字节的数据扩展1.9倍是一个错误。
发布于 2012-07-14 13:58:30
有可能您试图压缩的数据实际上是不可压缩的(或者您一开始就没有很多数据要压缩)。当数据中存在重复时,压缩效果最好。
它可能更大,因为压缩方案添加了用于解密流的元数据,但由于数据不可压缩或没有大量数据可供压缩生效,这实际上会使情况变得更糟。
如果你做了像zip这样的事情,你会发现解压并不总是使事情变得更小。
发布于 2012-07-14 13:59:19
小的数据块通常最终会变得更大,因为压缩算法使用了添加到输出中的代码表,或者需要更大的样本来找到足够的样本来处理。
你没做错什么。
https://stackoverflow.com/questions/11481438
复制相似问题