【问题标题】:zlib gzopen() returns a compressed file stream. Does it decompress the file?zlib gzopen() 返回一个压缩文件流。它会解压缩文件吗?
【发布时间】:2016-08-30 16:47:32
【问题描述】:

zlib gzopen() 返回一个压缩文件流。

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

其中data_file 是压缩文件流。 我可能从 zlib 文档中错过了这一点。但是,这会解压缩打开的文件吗? 还是gzopen() 可以直接解析gzip压缩文件而不需要 解压?

提前致谢!

【问题讨论】:

  • 当您使用gz 函数从打开的文件中读取数据时会发生解压缩。 gz 函数族的全部意义在于,它们允许您使用具有 C 风格界面的压缩文件,就像它们未压缩一样。

标签: c++ gzip zlib


【解决方案1】:

gzopen 不解压缩数据,gzread 在您阅读时解压缩。

我没有在 zlib 文档中找到关于这一事实的简单陈述,但如果您想自己“证明”它,请创建一个大(几 GB)压缩文件,然后测量 gzopen 返回的速度。它“显然”不需要解压缩整个文件所需的时间。如果您查看 gzip 压缩是如何定义的,您会发现它被设计为作为流进行写入和读取,也就是说您不需要一次解压缩整个文件。

【讨论】:

  • 假设您实际上并未存储数据,假设gzread 用于将压缩文件打印到标准输出(作为未压缩文本)。这种程序的内存使用峰值永远不会达到完全解压缩文件,存储在缓冲区中,然后打印出解压缩数据的程序?
  • 我可以确认gzopen()没有做任何解压。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-08
  • 1970-01-01
  • 1970-01-01
  • 2015-05-04
  • 1970-01-01
相关资源
最近更新 更多