.net 4.5 中的 GZipStream class 可以创建更大的文件吗?

Can GZipStream class in .net 4.5 create larger sized files?

我在 winform 应用程序中使用压缩功能在上传前压缩文件。以前我们使用 .net framework 3.5 和 GZipStream class 在大多数 cases.But 中生成更大的文件,在升级到 .net framework 4.5 后,我对同一组 [= 获得了非常好的压缩结果=14=],看来他们已经修复了 .net 4.5 中的压缩错误。但我想知道是否还有一些情况 GZip 压缩会产生比原始文件更大的文件 file.If 文件大小保持不变,那么这不是问题。或者我应该考虑使用其他压缩,我也尝试过 Donetzip Lib.But,.net 4.5 GzipStream 给我更好的结果。

是的。事实上,如果 any 有损压缩方案压缩任何数据流,则可以保证它会扩展某些数据流。您可以向压缩器提供随机数据以查看其扩展了多少。

最大扩展限制在少量。 gzip header 和 trailer 通常是添加到原始 deflate 流中的 18 个字节(即如果 gzip header 中没有文件名、额外数据或注释),原始数据在原始 deflate 流中的扩展仅限于为每个存储块添加五个字节。存储块的大小取决于压缩器和选项。如果 NET 4.5 使用带默认选项的 zlib,则块大小为 16383 字节。您也为最后一个块添加五个字节,这可能少于 16383 字节。

因此,例如,如果您使用默认设置使用 zlib 将 20,000 个随机字节压缩为 gzip 格式,则生成的大小为 20,028 字节。压缩 30 个随机字节将产生 53 个字节的输出。