zlib gzopen()返回一个压缩文件流。它解压缩文件吗?

问题描述:

zlib gzopen()返回压缩文件流。zlib gzopen()返回一个压缩文件流。它解压缩文件吗?

gzFile data_file; 
data_file = gzopen(filename.c_str(), "r"); 

其中data_file是压缩文件流。 我可能错过了zlib文档。但是,这是否解压打开的文件? 或者是gzopen()能够直接解析gzip文件而不需要 来解压缩它吗?

在此先感谢!

+0

解压缩发生在使用'gz'函数从打开的文件中读取时。 'gz'函数族的全部重点在于它们允许你使用带有C风格接口的压缩文件,就好像它们是未压缩的一样。 – HolyBlackCat

gzopen不解压缩数据,gzread解压缩,因为你读它。

我还没有在zlib文档中发现这个事实的简单声明,但是如果你想“证明”它自己创建一个大的(几GB)压缩文件,然后测量gzopen返回的速度有多快。它“显然”不需要时间来解压缩整个文件。如果你看看gzip压缩是如何定义的,你会发现它的设计是以流的形式来编写和读取的,也就是说你不需要一次解压整个文件。

+0

因此,假设你没有真正存储数据,可以说'gzread'用于将压缩文件打印到标准输出(作为未压缩的文本)。这种程序的峰值内存使用率永远不会达到完全解压缩文件,存储在缓冲区中,然后打印出解压缩数据的程序的峰值内存使用率? –

+0

这是正确的。 –

+0

欢呼,熊兄弟! –