如何使用GIO正确解压缩文件



GIO提供了一个Zlib转换器来解压缩文件。解压缩函数以输出缓冲区大小为参数。

是否有可能在解压缩文件之前知道这个缓冲区的大小?如果没有,这个尺寸的约定是什么?它是一个经常使用的压缩和解压大小之间的比率吗?

正如你所链接到的文档所说,"它将在循环中被调用多次,每次它都会做一些工作,即产生一些输出(在outbuf中)或消费一些输入(从inbuf)或两者都有。"

换句话说,您不应该在一次函数调用中解压缩整个文件。你应该选择一个适合你的缓冲区大小,然后反复读入它,直到流没有更多的数据为止。

是否有可能在解压缩文件之前知道这个缓冲区的大小?

不可能提前知道缓冲区的解压缩大小,除非你已经单独存储了这些信息(无论是zlib还是GIO都不会为你这样做)。

如果没有,这个大小的约定是什么?这是一个经常使用的压缩和解压大小之间的比率吗?

没有。对于非常重复的数据,压缩后的字节可以解压缩到大量字节(gzip将压缩一个千兆字节的NULL字节压缩到1020字节),对于不可压缩的数据,"压缩"的数据实际上可能比未压缩的数据大一点(参见zlib中的compressBound函数)。

最新更新