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

时间:2014-03-28 10:32:48

标签: compression zlib glib gio

GIO提供了一个Zlib converter to decompress文件。 decompression function获取参数中的输出缓冲区大小。

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

感谢您的帮助

1 个答案:

答案 0 :(得分:1)

正如您链接的文档所说的那样,"它在循环中被多次调用,每次它都会做一些工作,即产生一些输出(在outbuf中)或消耗一些输入(来自inbuf) )或两者。"

换句话说,您不应该在一次函数调用中解压缩整个文件。您应该选择适合您的缓冲区大小,并重复读取它,直到流不再有数据。

  

在解压缩文件之前,是否可以知道此缓冲区应具有的大小?

除非你单独存储了这些信息(zlib和GIO都没有为你做过),否则不可能提前知道缓冲区的解压缩大小。

  

如果没有,这个尺寸的惯例是什么?它是压缩和解压缩尺寸之间经常使用的比率吗?

没有。对于极其重复的数据,压缩字节可以解压缩为大量字节(gzip将压缩一千兆字节的NULL字节压缩到1020字节),而对于不可压缩的数据,压缩的字节数为#34;数据实际上可能比未压缩数据大一点(参见zlib中的compressBound函数)。