GIO 提供了一个 Zlib转换器来解压文件。解压函数采用参数中的输出缓冲区大小。
在解压缩文件之前是否可以知道该缓冲区的大小?如果不是,这个尺寸的约定是什么?它是压缩和解压缩大小之间常用的比率吗?
谢谢你的帮助
正如您链接到的文档所说,“它将在一个循环中被多次调用,并且每次它都会做一些工作,即产生一些输出(在 outbuf 中)或消耗一些输入(来自 inbuf )或两者兼而有之。”
换句话说,您不必在一个函数调用中解压缩整个文件。您应该选择一个适合您的缓冲区大小,然后重复读取它,直到流中没有更多数据。
在解压缩文件之前是否可以知道该缓冲区的大小?
除非您单独存储了该信息(zlib 和 GIO 都没有为您做),否则不可能提前知道缓冲区的解压缩大小。
如果不是,这个尺寸的约定是什么?它是压缩和解压缩大小之间常用的比率吗?
空无一人。对于极其重复的数据,压缩字节可以解压缩为大量字节(gzip 将压缩一千兆字节的 NULL 字节,此处压缩为 1020 字节),对于不可压缩数据,“压缩”数据实际上可能比未压缩数据大一点(参见 zlib 中的 compressBound 函数)。