首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么deflate让我的数据变得更大?

为什么deflate让我的数据变得更大?
EN

Stack Overflow用户
提问于 2012-07-14 13:54:29
回答 6查看 1.2K关注 0票数 4

我想压缩一些数据,所以我想我应该通过deflate来运行流

它从304字节增加到578字节。这是1.9倍大。我在试着压缩它……我在这里做错了什么?

代码语言:javascript
运行
复制
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();
}
EN

回答 6

Stack Overflow用户

回答已采纳

发布于 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倍是一个错误。

票数 4
EN

Stack Overflow用户

发布于 2012-07-14 13:58:30

有可能您试图压缩的数据实际上是不可压缩的(或者您一开始就没有很多数据要压缩)。当数据中存在重复时,压缩效果最好。

它可能更大,因为压缩方案添加了用于解密流的元数据,但由于数据不可压缩或没有大量数据可供压缩生效,这实际上会使情况变得更糟。

如果你做了像zip这样的事情,你会发现解压并不总是使事情变得更小。

票数 3
EN

Stack Overflow用户

发布于 2012-07-14 13:59:19

小的数据块通常最终会变得更大,因为压缩算法使用了添加到输出中的代码表,或者需要更大的样本来找到足够的样本来处理。

你没做错什么。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11481438

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档