zlib 是 Deflate 的库,它是一种压缩算法,已广泛用于C#,Haskell,Java,Perl,Python 和 Ruby 等主要编程语言。由于压缩和解压缩速度很快,因此可以有效使用磁盘空间并减少通信量,可以轻松使用 zlib。本文介绍了如何使用C语言中的 zlib。

官方网站:https://zlib.net

安装

centos 中安装:

源码安装:

基本用法

引入头文件:

创建类型为z_stream的结构体,例如 z

初始化三个变量:

调用初始化函数:deflateInit(&z,Z_DEFAULT_COMPRESSION)。 如果返回值不是Z_OK,则为错误。

调用 deflate(&z,Z_NO_FLUSH) 函数。 如果返回值不是Z_OK,则为错误。 deflate(&z,Z_NO_FLUSH) 使指针 z.next_in 和 z.next_out 前进,并减少剩余量 z.avail_in 和 z.avail_out。 当 z.avail_in 变为零时,准备下一个输入数据,将其起始地址设置为 z.avail_in,并将数据量设置为 z.avail_in。 同样,当 z.avail_out 变为零时,写入文件并更新 z.next_out 和 z.avail_out。当它是最后一个输入时,即 deflate(&z,Z_FINISH),在这种情况下,如果返回值是Z_OK,则意味着仍有事情要做,因此可以通过将输出缓冲区写入文件等来腾出空间,然后再次调用deflate(&z,Z_FINISH)。 这一直持续到返回值为 Z_STREAM_END。最后,调用 deflateEnd(&z) 清理内存并释放已使用的内存。 如果返回值不是Z_OK,则为错误。

解密(解压缩)压缩版本几乎相同,但是功能名称从 deflate 变为 inflate 提供参数比使用压缩要容易一些。

示例代码:

完整代码:

然后编译:

使用 -lz 选项,表示链接 zlib 库 libz.a。

高级用法

下面展示了通过高阶函数的使用示例:

 

苏ICP备18021088号-2 Copyright © 2020 zlib.cn All Rights Reserved