Распаковка данных bzip2 в Javascript - PullRequest
0 голосов
/ 08 апреля 2019

В конечном итоге мне придется использовать некоторые данные из файла Javascript, который выглядит следующим образом:

Примечание: Base64 является только иллюстративным.

function GetTripsDataCompressed() { return 'QlpoOTFBWSZTWdXoWuEDCAgfgBAHf/.....=='; }

GetTripsDataCompressed() возвращает строку base64 , полученную в виде массива объектов, преобразованных в JSON с использованием JSON.NET , а затем полученную строку сжимают в bzip2 с помощью SharpCompress срезультирующий поток памяти в кодировке Base64.

Это то, что у меня есть, и я не могу его изменить.

Я изо всех сил пытаюсь найти реализацию JavaScript bzip2, которая получит результат:

var rawBzip2Data = atob(GetTripsDataCompressed());

и преобразуйте rawBzip2Data обратно в строку, являющуюся массивом JSON.Я не могу использовать что-то вроде compressjs , так как мне нужно поддерживать IE 10, и поскольку он использует типизированные массивы , это означает, что поддержка IE10 прекращена.

Так что, похоже, мой лучшийопция https://github.com/antimatter15/bzip2.js однако, поскольку я не создал архив и только bzip2 строку, после этого возникает ошибка Uncaught No magic number found:

var c = GetTripsDataCompressed();
c = atob(c);
var arr = new Uint8Array(c);
var bitstream = bzip2.array(arr);
bzip2.simple(bitstream);

Так что кто-нибудь может мне помочь здесь распаковатьBZip2, строка в кодировке Base64 из JavaScript с использованием сценария, совместимого с IE 10?В конечном счете, мне все равно, использует ли он https://github.com/antimatter15/bzip2.js или какую-либо другую нативную реализацию JavaScript.

1 Ответ

1 голос
/ 08 апреля 2019

Мне кажется, что ответ находится в файле readme:

декомпрессия (битовый поток, размер [, len]) выполняет основную декомпрессию отдельного блока.Он вернет -1, если обнаружит, что это последний блок, в противном случае он возвращает строку с распакованными данными.Если вы хотите ограничить вывод определенным числом байтов, установите аргумент len.

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

С другой стороны, сам алгоритм Bzip2 является открытым исходным кодом (BSD-подобная лицензия), поэтому вы можете просто переопределить его самостоятельно в Javascript.Это всего лишь несколько сотен строк относительно простого кода.

...