woaidongmao

文章均收录自他人博客,但不喜标题前加-[转贴],因其丑陋,见谅!~
随笔 - 1469, 文章 - 0, 评论 - 661, 引用 - 0
数据加载中……

Zlib与GZip

zlib是一个通用的压缩开源库,提供了在内存中压缩和解压的函数,包括对解压后数据的校验。目前版本的zlib只支持deflate方法,但是其它的方法将会被添加进来并且拥有同样的接口。

—— zlib manaul

    deflate算法在rfc1951中有详细的说明。

    zlib同时又是一种数据格式,使用zlib库压缩后的数据会在deflate数据的头和尾添加信息,形成zlib格式的数据。

 

   gzip也是一种数据压缩格式,可以大体分为头部,数据部和尾部三个部分,其中头部和尾部主要是一些文档属性和校验信息(rfc1952),数据部主要是用deflate方法压缩得到的数据。
   
    zlib
库默认的压缩方法并不是gzip的,而是zlib的,因此使用zlib压缩得到gzip格式的数据有两种方法:

1. 使用zlib提供的gz***系列函数可以直接把想要的内容写入一个磁盘gzip文件;

2. 如果想在内存中生成gzip格式的数据,可以在初始化的时候调用inflateInit2函数,并指定为gzip格式,代码如下:

   

  z_stream d_stream;
  d_stream
.zalloc = NULL;
  d_stream
.zfree = NULL;
  d_stream
.opaque = NULL;
 
int ret = deflateInit2(&d_stream, Z_DEFAULT_COMPRESSION, Z_DEFLATED, DEFAULT_WINDOWSIZE, DEFAULT_MEMLEVEL,  Z_DEFAULT_STRATEGY);

 
if (Z_OK != ret)
  {
    printf
("init deflate error\n");
    return
ret;
  }

    之后,用deflate压缩出来的数据就是gzip的了。

 

posted on 2009-09-07 21:27 肥仔 阅读(516) 评论(0)  编辑 收藏 引用 所属分类: 库 & 代码段


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理