Zlib的deflate, z_stream结构的使用
使用deflate进行压缩时,先要定义z_stream结构体,
先将z_stream的zalloc, zfree, opaque偏量设为Z_NULL, 再调用
deflateInit函数初始化z_stream结构,初始化时主要是用z_stream结构与Z_DEFAULT_COMPRESSION和默认压缩来初始化,
初始化好后,再要初始化四个重要分量,为被压缩源字符串next_in,被压源字符串的长度avail_in,压缩后字符串的最大长度(avail_out),压缩后字符串的存放缓冲区(next_out)。
设好后,还得设一个参数即刷新方式flush, 这个参数是deflate函数的第二个参数,一般设为Z_FINISH, 或者Z_NO_FLUSH, 如果是读的文件取字符串
可以使用flush = feof(source) ? Z_FINISH : Z_NO_FLUSH再设定。
以z_stream, flush为参数,调用deflate函数后,这时开始的next_out指向的内存中就有压缩的字符串了,但next_out, avail_out都会发生变化,其具体的变化是,avail_out会变为剩下的还没有使用的最大空间数,而next_out是指的原来的原来的指针加上所读的字符串,
压缩后,可以通过最大压缩后所以空间大小减avail_out得压缩后串大小,通过原来的压缩串指针得压缩后字符串。
如果有任何错误,调用deflateEnd函数,当avail_out等于零时,表示加密串满了,则还要压,不过一般不可能因为压缩串不可能大于源串,如果加密串没满,那么,确认一下avail_in是否为0, 表示把源串全压了,再通过flush的值判断是否再压。
以上完成了一次压缩
分享到:
相关推荐
zlib dll in wince 5.0 parfrom
文件压缩实例 zlib很好的压缩实例
这里有zlib1g_1.2.11.dfsg-0ubuntu2_amd64.deb zlib1g_1.2.11.dfsg-0ubuntu2_i386.deb zlib1g-dev_1.2.11.dfsg-0ubuntu2_amd64.deb三个文件, 依次安装 zlib1g_1.2.11.dfsg-0ubuntu2_i386.deb zlib1g_1.2.11.dfsg-0...
使用Delphi自带Compress类进行数据流压缩和解压缩的范例, 数据流可以从文件导入或者导出到文件.
zlib.NET_104 zlib C#版
zlib库函数,用于压缩,解压,QT平台可加载。
新版的zlib库,vs2015运行环境已搭建好,可直接编译通过。省去各种配置的麻烦。
zlib源码
著名的压缩代码的最新版
Delphi基于zlib类库实现文件压缩程序,据说zlib压缩率可达到80%
zlib编译好的文件,可以直接作为开发板编译的32位文件使用
压缩包里包含有zlib库的include文件 zlib库的静态链接库 zlib库的动态链接库
zlib开发库rpm文件,centos7.5直接安装
this small program is used to measure the performance of zlib s inflate algorithm..
BCB用的zlib库,最新版本1.2.7。 包含头文件和lib。
强大的实时聊天工具,具有视频通话和语音聊天功能,并与家人和朋友聊天,随时随地
curl7.77 支持openssl,zlib,libssh, 可直接编译出x64平台下的debug/release库
Delphi的开发者可以使用ZLib单元中定义的TCompressionStream进行数据压缩,使用TDecompressionStream解压缩ZLib压缩后的数据。
ZLib like you've never seen it before