В документации, на которую вы ссылаетесь, говорится: «Его нужно вызывать несколько раз в цикле, и каждый раз он будет выполнять некоторую работу, т. Е. Создавать некоторый вывод (в outbuf ) или потреблять некоторый ввод (из inbuf ) или и то, и другое».
Другими словами, вы не должны распаковывать весь файл за один вызов функции. Вы должны выбрать размер буфера, который вам подходит, и просто считывать его несколько раз, пока в потоке не останется данных.
Можно ли узнать размер этого буфера перед распаковкой файла?
Невозможно заранее узнать размер распакованного буфера, если вы не сохранили эту информацию отдельно (ни zlib, ни GIO не сделают этого за вас).
Если нет, каково соглашение об этом размере? Это часто используемое соотношение между сжатым и распакованным размером?
Здесь ничего нет. Для чрезвычайно повторяющихся данных сжатые байты могут распаковываться до огромного количества байтов (gzip сжимает гигабайт NULL-байтов здесь сжимается до 1020 байтов), а для несжимаемых данных «сжатые» данные могут быть фактически немного больше, чем несжатые данные (см. функцию CompressBound в zlib).
person
nemequ
schedule
28.03.2014