我通过nodejs中的套接字接收了一些二进制数据,使用zlib压缩了。 我无权访问产生消息的来源。
当我尝试解压缩数据时,我从zlib中收到“有时”错误。
下面是一个示例,为方便起见,我在HEX中编码了两个消息。 我确定它们都是zlib压缩的(标头“ 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
答案 0 :(得分:0)
第二条测试消息实际上是无效的。它要么在传输过程中被破坏(包括代码中),要么在创建时被破坏了。
要检查的一件事是,如果您使用的是Windows操作系统,则是否使用二进制模式读取文件。如果没有,那么实际上可能会破坏某些输入,而不会破坏其他输入。