Как правильно работать с zlib::inflate_stream::write?C++

Программы на C++. Форум разработчиков
Ответить
Гость
 Как правильно работать с zlib::inflate_stream::write?

Сообщение Гость »


Я пытаюсь понять мелкие детали работы с zlib::inflate_stream::write. Код примерно такой:

zlib::z_params params; zlib::inflate_stream раздувать; params.data_type = zlib::binary; params.avail_in = inBufferSize; params.next_in = inBuffer; params.avail_out = outBufferSize; params.next_out = outBuffer; boost::beast::error_code boostErrorCode; inflate.write(zParams, zlib::Flush::finish, boostErrorCode); Это не мой код, поэтому я предпочитаю не менять zlib::Flush::finish, хотя часто входные данные поступают пакетно.

Вот что я понимаю:
Перед звонком:
параметры такие же, как и ожидалось:avail_in — это количество байтов во входном буфере, то есть next_in. Avail_out — это размер выходного буфера — Avail_out.
После звонка:
[*]avail_in — это количество байт, оставшихся во входном буфере, которые не были использованы. [*]next_in — все байты, предшествующие этому, были использованы. Этот и последующие байты не использовались. [*]avail_out — объем данных, записанных в выходной буфер. [*]next_out — записанные данные были записаны до этого момента, не считая.
Мои вопросы:
[*]Сжатые данные хранятся в битах, а не в байтах. Могу ли я быть уверен, что все биты из байтов, использованных во входном буфере, были разложены. Могу ли я быть уверен, что все биты в байте, указанные в next_out, не были использованы? [*]Если входной буфер содержит сжатые данные, а после него — несжатые данные? Распознает ли zlib несжатые данные и завершится раньше или выдаст какую-то ошибку? [*]Если входной буфер содержит два блока данных, каждый из которых сжимается отдельно, узнает ли zlib разницу между ними и остановится перед вторым? Будет ли он распаковывать оба? [*]Предполагая, что входные данные поступают частями, как мне узнать, закончил ли я распаковку данных?
Я также буду признателен за обсуждение вышеуказанного вопроса с вариацией параметра Flush.

Спасибо
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»