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

问题描述:

GIO提供了一个Zlib converter to decompress文件。 decompression function将参数中的输出缓冲区大小。如何正确使用GIO解压文件?

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

感谢您的帮助

当你链接到文档中说,“这是在循环中被调用多次,每一次它会做一些工作,即产生一些输出(在outbuf中)或消耗一些输入(来自inbuf)或两者。“

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

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

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

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

没有。对于极端重复的数据,压缩的字节可以解压缩到大量的字节(gzip将压缩千兆字节的NULL字节压缩到1020字节),对于不可压缩的数据,“压缩”数据实际上可能比未压缩数据大一点(请参阅zlib中的compressBound函数)。