Nodejs 文件放气不产生预期的结果

Nodejs file deflate does not produce expected result

我通过网络收到一个包含压缩 xml 文件的字节数组。我使用以下方法进行充气和放气。

let file = "./xmls/test.xml";
let arr = [120, 218, 188, 189, 121, 115, 219, 72, 150, 47, 250, 255, 251, 20, 169, 154, 59, 225, 174, 30]; 
//only took the first 20 bytes of this huge array for this example

zlib.inflate(Buffer.from(arr), (error, resultBuffer) => {
    fs.writeFile(file, resultBuffer, () => {
        console.log('done');
    })
});

结果 xml 文件为 280.458 字节,没有任何非 ascii(非法)字符。
完成后我在新进程中调用以下代码

let file = "./xmls/test.xml";
fs.readFile(file, (readFileError, readFileBuffer) => {
    zlib.deflate(readFileBuffer, (deflateError, deflateBuffer) => {
        console.log(deflateBuffer);
        // <Buffer 78 9c bc bd 69 73 db 48 96 36 fa fd fe 8a 54 cd 9d 70 77 bf ...
        // 120 156 188 189 105 115 219 72 150 54 250 253 254 138 84 205 157 112 119 191
    })
})

如您所见,初始字节数组与缩小后的输出不匹配
120 218 188 189 121 115 219 72 150 47 250 255 251 20 169 154 59 225 174 30 对比
120 156 188 189 105 115 219 72 150 54 250 253 254 138 84 205 157 112 119 191

我也尝试过基于流的方法,但它产生了相同的结果。
压缩 xml 文件后如何获取初始字节数组?

有可能你不能,但这没关系。一般来说,你不应该期望你可以解压缩然后重新压缩到完全相同的东西,除非你使用相同的库、完全相同的库版本和相同的压缩设置。谁知道压缩数据的来源,以及生成它的原因。

唯一的保证是,如果您压缩然后解压缩,您得到的正是您开始时的内容。这就是无损的意思,这就是你应该验证的。不需要重建相同的压缩数据流,因为通常 许多 压缩数据流可以产生相同的未压缩输出。根据使用的算法和具体代码,以及用户要求的执行时间和压缩率之间的平衡,由压缩器找到一个好的压缩器。