Файл Nodejs deflate не дает ожидаемого результата - PullRequest
0 голосов
/ 03 мая 2018

Я получаю байтовый массив по сети, содержащий сжатый 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 байт без каких-либо (не допустимых) (недопустимых) символов.
После этого я вызываю следующий код в новом процессе

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-файла?

1 Ответ

0 голосов
/ 03 мая 2018

Возможно, что вы не можете, но это не имеет значения . В общем случае не следует ожидать, что вы можете распаковать, а затем повторно распаковать в одну и ту же вещь, если только вы не используете ту же библиотеку, точно такую ​​же версию библиотеки и те же параметры сжатия. Кто знает, откуда взялись эти сжатые данные и что использовалось для их генерации.

Единственная гарантия состоит в том, что если вы сжимаете, а затем распаковываете, то получаете именно то, с чего начали. Это то, что подразумевается под без потерь, и это то, что вы должны проверять. Нет необходимости восстанавливать одни и те же потоки сжатых данных, так как в общем случае множество сжатых потоков данных могут давать одинаковые несжатые выходные данные. Компрессор должен найти хороший, основываясь на алгоритмах и конкретном используемом коде, а также на балансе между временем выполнения и степенью сжатия, запрошенной пользователем.

...