Как правильно распаковать файл с помощью GIO?

GIO предоставляет Zlib преобразователь для распаковки файла . функция распаковки принимает в качестве параметра размер выходного буфера.

Можно ли узнать размер этого буфера перед распаковкой файла? Если нет, каково соглашение об этом размере? Это часто используемое соотношение между сжатым и распакованным размером?

Спасибо за вашу помощь


person azmeuk    schedule 28.03.2014    source источник


Ответы (1)


В документации, на которую вы ссылаетесь, говорится: «Его нужно вызывать несколько раз в цикле, и каждый раз он будет выполнять некоторую работу, т. Е. Создавать некоторый вывод (в outbuf ) или потреблять некоторый ввод (из inbuf ) или и то, и другое».

Другими словами, вы не должны распаковывать весь файл за один вызов функции. Вы должны выбрать размер буфера, который вам подходит, и просто считывать его несколько раз, пока в потоке не останется данных.

Можно ли узнать размер этого буфера перед распаковкой файла?

Невозможно заранее узнать размер распакованного буфера, если вы не сохранили эту информацию отдельно (ни zlib, ни GIO не сделают этого за вас).

Если нет, каково соглашение об этом размере? Это часто используемое соотношение между сжатым и распакованным размером?

Здесь ничего нет. Для чрезвычайно повторяющихся данных сжатые байты могут распаковываться до огромного количества байтов (gzip сжимает гигабайт NULL-байтов здесь сжимается до 1020 байтов), а для несжимаемых данных «сжатые» данные могут быть фактически немного больше, чем несжатые данные (см. функцию CompressBound в zlib).

person nemequ    schedule 28.03.2014