zlib, как распаковать поток сжатых данных?

У меня проблема с передачей сжатых данных по сети.

Размер данных составляет около нескольких сотен МБ. Мой план состоит в том, чтобы разделить данные на фрагменты размером 1 МБ и сжать каждый фрагмент с помощью zlib, а затем передать сжатые данные по сети. На другом конце сети данные будут распакованы с помощью zlib.

Мой вопрос в том, что, поскольку я передаю сжатые данные в потоке, не будет информации о том, где каждый сжатый фрагмент начинается и заканчивается в потоке. Я не уверен, может ли zlib распаковать такой сжатый поток данных.

Если zlib может, пожалуйста, дайте мне знать, какой режим очистки я должен использовать в методах deflate / inflate?

Спасибо!


person user1820267    schedule 13.11.2012    source источник


Ответы (2)


Непонятно, почему вы разделяете данные на части или зачем вам нужна специальная очистка. Если вы просто имеете в виду подачу данных в zlib кусками, zlib обычно используется именно так. zlib не волнует, как вы скармливаете ему данные - большие куски, маленькие куски, по одному байту, по одному гигантскому куску и т. д. не изменят сжатый результат.

Промывка действительно изменяет сжатый результат, немного или значительно ухудшая его, в зависимости от того, как часто вы промываете и как вы промываете.

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

person Mark Adler    schedule 13.11.2012
comment
В протоколе vnc они, кажется, запускают бесконечный поток zlib с синхронизацией после обновления экрана. В этом случае и в случае OP я бы ожидал сброса синхронизации. Правильно? - person E. van Putten; 30.08.2018

Если стратегия, которую вы использовали, является обязательной, вы можете создать протокол между вашим хостом и удаленным компьютером, например:

02 123456 the-compressed-data 654321 the-compressed-data

3 числа: 1. количество блоков данных, здесь 2 блока; 2. байты первого блока; 3. байты второго блока соответственно.

person junfx    schedule 14.11.2014