zlib的gzip压缩和.NET的GZipStream使用的压缩有什么区别?

时间:2011-06-30 22:08:20

标签: c# c compression zlib gzipstream

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

我的问题是:

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

2 个答案:

答案 0 :(得分:1)

我认为您遇到此问题的原因不是因为使用了压缩算法,而是因为文件的压缩方式。从zLib手册:

  

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

我认为正在发生的事情是你的linux机器上的文件被一起编入一个文件,然后一个文件被压缩。在WIndows中,我认为它压缩每个单独的文件,然后将它们压缩成1个文件。

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

答案 1 :(得分:1)

答案是...... Linux版本从未压缩数据开始。进行了大量的调试以找到导致它的错误,但在纠正之后,两个平台的尺寸现在都具有可比性。