【问题标题】:Can GZipStream class in .net 4.5 create larger sized files?.net 4.5 中的 GZipStream 类可以创建更大的文件吗?
【发布时间】:2023-04-06 15:05:01
【问题描述】:

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

【问题讨论】:

  • 压缩文件总是会有几个字节的元数据开销。如果您尝试压缩的文件可能无法再压缩,那么最终结果将比原始文件大。您对此无能为力。

标签: c# compression .net-4.5 gzipstream


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多