C ++解压缩文件,然后压缩解压缩的数据不会给出相同的文件作为结果

C++ Decompressing a file, then compressing the decompressed data does not give the same file as a result

我正在使用 ZLib 以及来自 https://github.com/mapbox/gzip-hpp 的头文件来处理 gzip 文件。

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

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

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

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