概述
1.简介
zlib是提供数据压缩用的函式库,由Jean-loup Gailly与Mark Adler所开发,初版0.9版在1995年5月1日发表。zlib使用DEFLATE算法,最初是为libpng函式库所写的,后来普遍为许多软件所使用。此函式库为自由软件,使用zlib授权。截至2007年3月,zlib是包含在Coverity的美国国土安全部赞助者选择继续审查的开源项目。
2.下载安装
下载地址:http://www.zlib.net/
我下载的是zlib-1.2.11.tar.gz,然后执行如下命令:
tar -zxvf zlib-1.2.11.tar.gz
cd zlib-1.2.11
./configure
make
make install
如果要编译成动态库,则只需要第一步改成./configure -s即可。
当当前目录下的.h都保存到自己要使用的地方。还有libz.a也是,这里使用的是静态库。
3.代码使用
我统一把.h放在了代码所在的当前目录下的include文件夹中
3.1 myzlib.h
#ifndef _MYZLIB_H_
#define _MYZLIB_H_
#include <iostream>
#include <cstring>
#include <cstdio>
#include <cstdlib>
#include <string>
#include "./include/zlib.h"
using namespace std;
class MyZlib{
public:
MyZlib();
MyZlib(const string& filename);
~MyZlib();
bool mygzread();
int gzcompress(Bytef *data, uLong ndata,
Bytef *zdata, uLong *nzdata);
int gzdecompress(Byte *zdata, uLong nzdata,
Byte *data, uLong *ndata);
private:
string m_filename;
gzFile m_fp;
char m_data[256];
};
#endif
3.2 myzlib.cpp
#include "myzlib.h"
MyZlib::MyZlib():m_fp(NULL){
memset(m_data,0,sizeof(m_data));
}
MyZlib::MyZlib(const string& filename):m_filename(filename),m_fp(NULL){
memset(m_data,0,sizeof(m_data));
}
MyZlib::~MyZlib(){
gzclose(m_fp);
}
/*bool MyZlib::mygzread(){
m_fp = gzopen(m_filename.c_str(),"rb");
if(!m_fp)
{
perror("open file error");
exit(-1);
}
gzseek(m_fp,0,SEEK_END);
unsigned long len = gztell(m_fp);
gzseek(m_fp,0,SEEK_SET);
while(!gzeof(m_fp)){
memset(m_data,0,sizeof(m_data));
gzread(m_fp,m_data,sizeof(m_data));
m_data[255]='