2

有一个奇怪的问题 - 我的一个应用程序套件必须读取/写入在 Windows 和 Linux 上使用的 gzip 压缩文件,我发现我在 Linux 上使用 zlib 生成的文件比我的文件大 2-3 倍GZipStream在 Windows 上使用生成。它们在任何一个平台上都能完美阅读,所以我知道无论哪个平台创建了文件,压缩都是正确的。问题是,文件在不同时间通过网络传输,显然文件大小是一个问题。

我的问题是:

  1. 有人遇到过这种情况么
  2. 两者之间是否有一些记录在案的区别?我知道这GZipStream并没有像使用 zlib 那样提供指定压缩级别的方法,但我在 zlib 端使用最大压缩。我不应该看到相对相同的文件大小,假设 GZipStream 也被写入使用最大压缩?
4

2 回答 2

1

我认为您遇到这种情况的原因不是因为使用的压缩算法,而是因为文件的压缩方式。来自 zLib 手册:

“zlib 格式设计为紧凑且快速,可用于内存和通信通道。gzip 格式设计用于文件系统上的单个文件压缩,具有比 zlib 更大的标头来维护目录信息,并使用不同的、比 zlib 慢的检查方法。”

我认为正在发生的事情是您的 linux 机器上的文件正在被打包成 1 个文件,然后该文件被压缩。在 Windows 中,我认为它会压缩每个单独的文件,然后将它们压缩存储到 1 个文件中。

这是我的理论,但没有什么可以真正支持它。我想我以后可能会在家里尝试一些试验,只是为了满足我的好奇心。

于 2011-06-30T22:31:09.247 回答
1

答案是……Linux 版本从一开始就没有压缩数据。花了很多调试才找到导致它的错误,但在纠正它之后,现在两个平台上的大小是相当的。

于 2011-09-28T13:07:44.203 回答