Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Распаковка gzip на лету.


Автор: Чучмек 31.5.2014, 00:16
Здравствуйте.
Загружаю по http сжатые данные (заголовок Content-Encoding:"gzip")
Необходимо распаковывать данные налету. По мере поступления, не дожидаясь конца загрузки.
Интересуют подходящие для этой цели библиотеки/компоненты.
Спасибо.

p.s. Позже, если это будет еще актуально, покажу свой велосипед.  

Автор: Akella 31.5.2014, 10:46
А разве это возможно?

Автор: Alexeis 31.5.2014, 10:57
Ну если были запакованы фрагментами, по n байт, то по мере получения цельного пакета можно его распаковывать. Почему нет?

Автор: PointerToNil 31.5.2014, 11:06
JCL/source/common/JclCompression.pas TJclGZIP{De}CompressionStream

Автор: drkot 7.6.2014, 20:21
Готовых решений не встречал.
Но делать такое возможно. Хотя может потребовать код на уровне алгоритма кодирования.
Принцип прост: нужно развернуть цикл. То есть раскодировав первую порцию (произвольной длинны) необходимо запомнить состояние всех промежуточных переменных и рас кодирование следующей порции начать с сохраненного состояния.
На высоком уровне это выглядит так:
Код

s:= '';
Decoder.Init;
...
s:= s + Decoder.Do(Buffer, Count);
...
s:= s + Decoder.Final;

Более детально принцип можно изучить на основе компонентов SecureBlackbox.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)