Как мне прочитать произвольные байты из потока zlib? - PullRequest
0 голосов
/ 12 ноября 2010

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

Есть ли способ указать количество байтов, которые возвращает inflate(), чтобы я мог следить за переводами строки?

Ответы [ 2 ]

2 голосов
/ 12 ноября 2010

Это, вероятно, даст ужасную производительность, поскольку функция inflate() может иметь некоторые начальные затраты.

Я бы предложил просто использовать разумный размер выходного буфера, а затем выполнять итерации по буферу после каждого вызова inflate(), собирая все найденные полные строки. Конечно, очень вероятно, что будет «хвост», то есть неполная строка, которую вы должны будете отслеживать в следующем раунде.

2 голосов
/ 12 ноября 2010

Когда вы вызываете inflate(), вы передаете указатель на структуру z_stream_s.z_stream_s::avail_out переменная-член этой структуры предназначена для указания размера выходного буфера.

...