Подтвердить что ты не робот

JavaScript: декомпрессировать/раздуть/распаковать/ungzip строки

Я ищу реализацию JavaScript для строковых алгоритмов накачки. Я хочу сжать на стороне сервера (Java) и распаковать на стороне клиента (JavaScript).

Я нашел:

разархивировать строки в javascript
Этот отмечен как ответ с ответом на разные проблемы. Другие ответы также для чего-то еще (разархивирование файлов в формате ZIP).

JavaScript завышает реализацию (возможно, только FF 3.6)
Это ближе всего к тому, что мне нужно. Однако я хотел бы иметь некоторые альтернативы.

Предложения?
Спасибо, Ондра

Обновление: У меня довольно конкретный вариант использования, пожалуйста, не отвечайте "Не делайте этого в JavaScript". Я пишу "автономный" инструмент отчетности (однажды сгенерированный, он помещается в статический магазин), а дефляция может сохранять мегабайты для одного отчета. Я ограничен другими приложениями, поэтому я не могу хранить его как zip файл.

4b9b3361

Ответ 1

Взгляните на этот вопрос о переполнении стека, ответы там содержат ссылки на несколько механизмов сжатия, реализованных в javascript. Большинство из них основаны на LZ77.

Ответ 2

Я не знаю, как вам это нравится, но мне нравятся эти реализации:

Первое быстрее, чем второе. Обычно мы можем обеспечить быстрый сервер, однако мы не знаем производительности клиентской машины. Поэтому я рекомендую вам выбрать js-deflate и настроить java (серверную сторону) для раздувания.

https://github.com/dankogai/js-deflate

http://code.google.com/p/gzipjs/

Ответ 3

есть эта библиотека графических объектов, которая имеет как часть ее, реализацию zlib в javascript. если вы немного прокрутите страницу вниз, вы увидите ее как отдельную загрузку. http://jsxgraph.uni-bayreuth.de/wp/download/

Ответ 4

Я создал рабочий пример, используя pako, современный и быстрый Zlib порт. http://jsfiddle.net/9yH7M/2/

Ответ 5

В этом примере: http://cheeso.members.winisp.net/srcview.aspx?dir=js-unzip показывает, как вы можете делать ZIP файлы в Javascript. Теперь я знаю, что вы хотите сжатие ZLIB или DEFLATE, а не ZIP. Но ZIP использует DEFLATE, а в файле .js для этого примера есть класс InflatingReader, который может INFLATE, когда он читает.

Класс предоставляет следующие методы:

readByte()
   returns null when EOF is reached, or the value of the byte when successful.

readToEnd()
   returns an array of all bytes read, to EOF

beginReadToEnd(callback)
   async version of the above

readBytes(n)
   returns an array of n bytes read from the source.

beginReadBytes(n, callback)
   async version of the above

Вы можете использовать этот код без изменений, если хотите INFLATE.

Если вы хотите ZLIB (aka unzip), тогда есть 2-байтная подпись, которую вы должны прочитать и проверить перед чтением сжатого байт и делать INFLATE. Просто измените InflatingReader на чтение и сброс 2 байтов, и он будет делать ZLIB просто отлично.

Ответ 6

Здесь я нашел рабочую реализацию раздувания:

http://www.onicos.com/staff/iz/amuse/javascript/expert/inflate.txt

Если вы хотите немного более чистую версию, которая namespaces алгоритма, это должно работать:

https://github.com/augustl/js-inflate

Имейте в виду, что gzipped "раздуть" данные префикса с двухбайтовым заголовком и суффикс с четырехбайтовой контрольной суммой, которую вам нужно будет удалить, прежде чем перейти к алгоритму.

Ответ 7

Не делайте этого в JavaScript. Это будет медленным, и кроме того, JS не справляется с двоичными данными.

Просто используйте кодировку передачи gzip на стороне сервера, и ваш браузер позаботится о ее распаковке.