Чтобы ответить на ваш вопрос о том, как вы можете включить поведение «синхронной очистки», вы должны увидеть пример zpipe.c в исходном коде zlib.
Заменить 1-ю строку на 2-ю строку, показанную ниже
Deflate()
будет возвращаться каждый раз, когда выходной буфер заполнен или когда входной буфер пуст, в то же время добавляя к сжатому потоку пустой литеральный блок, также называемый «сброс синхронизации», за исключением конца, который является флагом Z_FINISH
.
flush = feof(source) ? Z_FINISH : Z_NO_FLUSH;
flush = feof(source) ? Z_FINISH : Z_SYNC_FLUSH;
ret = deflate(&strm, flush);