zlib';的gzip压缩和.NET';s GZipStream

本文关键字:NET GZipStream gzip zlib 压缩 | 更新日期: 2023-09-27 18:00:44

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

我的问题是:

  1. 其他人遇到过这种情况吗
  2. 两者之间是否存在一些有记录的差异?我知道GZipStream没有提供像使用zlib那样指定压缩级别的方法,但我在zlib方面使用最大压缩。假设GZipStream也是为了使用最大压缩而编写的,难道我不应该看到相对相同的文件大小吗

zlib';的gzip压缩和.NET';s GZipStream

答案是。。。。Linux版本从一开始就没有压缩过数据。花了大量的调试来找到导致它的错误,但在纠正它之后,两个平台上的大小现在是可以比较的。

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

"zlib格式被设计成紧凑而快速,可用于内存和通信信道。gzip格式是为文件系统上的单文件压缩而设计的,它的头比zlib大,用于维护目录信息,并且使用了一种不同于zlib的、较慢的检查方法。"

我认为现在发生的事情是,你的linux机器上的文件被Tar’re合并为一个文件,然后这个文件被压缩。在WIndows中,我认为它会压缩每个单独的文件,然后将它们压缩存储到一个文件中。

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