nodejs zlib 从套接字解压二进制数据

nodejs zlib unzip binary data from socket

我通过 nodejs 中的套接字接收一些二进制数据,使用 zlib 压缩。 我无权访问消息来源。

当我尝试解压缩数据时,我收到来自 zlib 的 "sometimes" 个错误。

下面是一个例子,为了方便,我用十六进制编码了两条消息。 我确定它们都是 zlib 压缩的(header“789c”给了我信心),但我不明白为什么 test1 消息有效而 test2 消息无效。

也许需要字典? 也许压缩和解压缩算法之间的版本不匹配?

我觉得我可以排除读取数据的问题,因为两条消息的读取方式相同。

非常感谢 zlib 专家的帮助。

let test1 = "789c4d8e410e82301444f79ea2f9fb021f51206971e5c2ad7a01da7e840894d06a20c6bb8bbad0e54c66f29ed84d5dcbee34bac6f61230886057ac4439d1e0f777eabd2b84b2662e84b6bda7c933dd364b2dc139e5815d6e8d91f040aa22131bcdb7581a9e6c50f11c938c27695646b45e672a534f60aeb6c361d9a7e936e2790c3f701c2006086121e84365ba267d75b74e02b0ba74a7d9795a0202b35545e3791e48c2f17d08bf7ee1bff3ea051dd44446";
let test2 = "789c4d8e410e82301444f79ca2f9fb0205059ab4b072e156bd006d3f42544a683110e3dd455de8722633794f54f3ed4aee38bacef6125818435506a29e71f0bb3bf6de954259b39442dbdee3ec89be766b2dc139e5819ca7ce4878285d37292b38cd52cde826ce38e55b8334df2aad8d490aaeea2710d7da61bfeef33c8b294fe0074e42c642065129f04325ba457d71d34d0290b676c7c5795c5c0303629b06c7d332a084c3fb107dfda27fe7e0054ca744b6";


console.log(zlib.unzipSync(Buffer.from(test1, "hex")).toString()); // correct output
console.log(zlib.unzipSync(Buffer.from(test2, "hex")).toString()); // ERROR: data check

第二个测试消息实际上是无效的。它要么在传输过程中损坏(包括在您的代码中),要么在制作时损坏。

要检查的一件事是,如果您使用的是 Windows 操作系统,您是否使用二进制模式读取文件。如果没有,那么实际上有可能某些输入被破坏,而其他的则没有。