nodejs zlib распаковать двоичные данные из сокета - PullRequest
0 голосов
/ 01 декабря 2018

Я получаю некоторые двоичные данные через сокет в 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

1 Ответ

0 голосов
/ 02 декабря 2018

Второе тестовое сообщение фактически недействительно.Либо он был поврежден при передаче (в том числе в вашем коде), либо он был поврежден при создании.

Одна вещь, которую нужно проверить, - если вы работаете в операционной системе Windows, используете ли вы двоичный режимпрочитать файл.Если нет, то на самом деле некоторые входные данные могут быть повреждены, а другие нет.

...