C++ C++;解压缩一个文件,然后压缩解压缩后的数据不会得到相同的文件

C++ C++;解压缩一个文件,然后压缩解压缩后的数据不会得到相同的文件,c++,compression,zlib,C++,Compression,Zlib,我正在使用ZLib和来自的头文件来处理gzip文件 我已经试了好几天了。我有一个文件名为“abc”,当我解压它时,我将它压缩回来,并将压缩结果保存在另一个文件“xyz”中。现在,理论上,“abc”的数据应该等于“xyz”,但事实并非如此。正如我所比较的,这两个文件是不同的。我正在使用fstream读取/写入带有二进制标志的文件。我也尝试过不同的压缩级别,但失败了。我还检查了解压后的数据,结果准确无误。我唯一的麻烦是将其压缩回去,这会产生与原始数据不同的结果。没有理由期望也没有任何需要能够重建相同

我正在使用ZLib和来自的头文件来处理gzip文件


我已经试了好几天了。我有一个文件名为“abc”,当我解压它时,我将它压缩回来,并将压缩结果保存在另一个文件“xyz”中。现在,理论上,“abc”的数据应该等于“xyz”,但事实并非如此。正如我所比较的,这两个文件是不同的。我正在使用fstream读取/写入带有二进制标志的文件。我也尝试过不同的压缩级别,但失败了。我还检查了解压后的数据,结果准确无误。我唯一的麻烦是将其压缩回去,这会产生与原始数据不同的结果。

没有理由期望也没有任何需要能够重建相同的压缩数据。保证无损压缩的是x->compress->decompress->y将导致y与x完全相同。对于p->decompress->compress->q,不能保证q与p相同,或类似于p,甚至与p的长度相同

由于不同的压缩软件、同一压缩软件的不同版本或同一版本的不同压缩设置,差异可能会有所不同


zlib和gzip压缩器虽然由同一个人编写,但无论您选择何种设置,它们通常都会生成不同的压缩数据。当它们决定发出放气块时,内部有不同的方法。

压缩的结果将取决于压缩设置(例如,窗口大小),因此,它不一定是相同的。如果您运行两次并将结果保存到不同的名称,您的程序是否会生成相同的文件?用于压缩的库可能也会影响结果。Mike,我尝试了许多不同的设置,但没有任何帮助。是的,我让它产生了10个不同的文件,但结果是一样的,退休忍者。Alam,我尝试了3个不同的库,但结果相同。我正在制作一个游戏保存修改器,并将保存文件加载回游戏中,它需要具有特定的gzip格式,我无法理解。我希望这可以清除“也不需要重建相同的压缩数据”部分。不,这并不能清除它。如果您需要完全相同的gzip流,那么使用原始的。如果您正在修改gzip流的内容,那么它不能是相同的。什么意思是“如果您需要完全相同的gzip流,那么使用原始的”?我清楚地告诉你我没有修改任何东西。我的意思是使用文件“abc”,而不是文件“xyz”。我的意思是不要一次又一次地解压。只要使用“abc”,我就不能修改它了。这就是问题所在。