GZip 压缩(通过 .net)可以增加文件大小吗?

Posted

技术标签:

【中文标题】GZip 压缩(通过 .net)可以增加文件大小吗?【英文标题】:Can GZip compression (via .net) increase file size? 【发布时间】:2010-10-19 23:03:57 【问题描述】:

我使用 .Net 的 GZipStream 类跟踪我正在压缩的文件的原始大小,而且我认为我正在压缩的文件似乎已经增加了大小。这可能吗?

这就是我进行压缩的方式:

Byte[] bytes = GetFileBytes(file);

using (FileStream fileStream = new FileStream("Zipped.gz", FileMode.Create))

    using (GZipStream zipStream = new GZipStream(fileStream, CompressionMode.Compress))
    
        zipStream.Write(bytes, 0, bytes.Length);
    

【问题讨论】:

【参考方案1】:

是的,可以。一直是fixed in .NET 4。

System.IO.Compression..::.DeflateStream 和 System.IO.Compression..::.GZipStream 类的压缩算法得到了改进,因此已经压缩的数据不再膨胀。这导致更好的压缩比。此外,压缩流的 4 GB 大小限制已被删除。

检查:GZipStream/DeflateStream increase file size on compression

也可以在这里查看:GZipStream and DeflateStream produce bigger files

【讨论】:

但是请注意,任何能够压缩某些输入数据的压缩方案肯定也会为其他一些输入数据生成更大的文件(检查 pidgeon hole 原理)。 是的,当然。基本上任何压缩方案都依赖于数据是冗余的这一事实,因此可以通过使用特定的编码方案来减少数据。但这并不总是正确的,例如如果您尝试使用其中的随机数据压缩文件或已经使用良好的压缩器进行压缩。但最初的问题是关于特定的压缩器实现(而不是压缩算法本身)。良好的压缩器实现可以回退到完全不压缩的存储文件,因此几乎不会增加其大小。我不认为迈克询问结果文件增加到几个标头的字节。【参考方案2】:

另一个原因可能是你在压缩时包含了.git 文件夹,当你开发和使用 git 时它会膨胀。

对我来说,排除.git 解决了这个问题。

【讨论】:

以上是关于GZip 压缩(通过 .net)可以增加文件大小吗?的主要内容,如果未能解决你的问题,请参考以下文章

前端性能优化

gzip压缩命令

nginx/express 开启gzip压缩

vue项目打包gzip压缩

怎么让.NET支持gzip压缩页面的功能

每天一个linux命令(28)--gzip命令