При чтении выделяется входной буфер size
и выделяется буфер вывода 2*size
. При написании тоже самое, но в обратном порядке.
Если len
меньше size
в gzwrite(state, buf, len)
, то предоставленные данные поступают во входной буфер. Этот входной буфер сжимается после накопления size
байтов. Если len
больше или равно size
, то то, что остается в буфере, сжимается, за которым следуют все предоставленные данные len
. Если запрашивается очистка, то все данные во входном буфере сжимаются.
Сжатые данные накапливаются в выходном буфере size
, который записывается каждый раз, когда size
сжатых байтов накоплено или когда gzFile
сбрасывается или закрывается.