Этот вопрос больше относится к обработке буфера, чем к алгоритму сжатия, хотя об этом тоже можно сказать немного.
Некоторые алгоритмы сжатия по своей сути основаны на блоках, что означает, что им абсолютно необходимо работать с блокамиконкретный размер.Это ситуация bzip2, размер блока которого выбирается благодаря переключателю уровня от 100 до 900 КБ.Таким образом, если вы передаете данные в него, он будет ждать заполнения блока и начнет сжимать этот блок, когда он заполнится (в качестве альтернативы, для последнего блока он будет работать с любым размером, который он получит).
Некоторые другие алгоритмы сжатия могут обрабатывать потоки, что означает, что они могут непрерывно сжимать новые данные, используя более старые данные, хранящиеся в буфере памяти.Это можно сделать с помощью алгоритмов, основанных на «скользящих окнах», и, как правило, zlib может этого добиться.
Теперь даже компрессоры с «скользящими окнами» могут, тем не менее, выбрать разделение входных данных на блоки либо для упрощения управления буфером,или для развития многопоточных возможностей, таких как pigz.