ZLib 解压缩工具

功能:压缩一段字节流,但是不包含任何文件信息。所以如果要编写压缩数据,还要自定义头部信息之类的,自己生成对应的文件结构
设计:CMake编译工具(用于在windows中进行官网上的包进行工程生成,英语好的可以通过example来进行学习)。
关键字:compress,uncompress, inflate,deflate。

  • 简单解压缩:(前提,dest和source都是已分配足够内存的内存地址),OF()是自定义的宏,去掉就好。
压缩数据块
int ZEXPORT compress OF (( Bytef * dest ,   uLongf * destLen ,
                                 const Bytef * source , uLong sourceLen ));
解压数据块
  int ZEXPORT uncompress OF (( Bytef * dest ,   uLongf * destLen ,
                                   const Bytef * source , uLong sourceLen ));
  • 分块解压缩:分块传递数据,然后对数据进行解压缩,感觉没什么用,可以根据上述两个函数模拟。
关键结构:
     
typedef struct z_stream_s {
    z_const Bytef * next_in ;     /* next input byte */
    uInt      avail_in /* number of bytes available at next_in */
    uLong     total_in /* total number of input bytes read so far */
    Bytef     * next_out ; /* next output byte will go here */
    uInt      avail_out ; /* remaining free space at next_out */
    uLong     total_out ; /* total number of bytes output so far */
    z_const char * msg /* last error message, NULL if no error */
    struct internal_state FAR * state ; /* not visible by applications */
    alloc_func zalloc /* used to allocate the internal state */
    free_func   zfree ;   /* used to free the internal state */
    voidpf      opaque /* private data object passed to zalloc and zfree */
    int      data_type /* best guess about the data type: binary or text
                           for deflate, or the decoding state for inflate */
    uLong    adler ;      /* Adler-32 or CRC-32 value of the uncompressed data */
    uLong    reserved ;   /* reserved for future use */
} z_stream ;
     typedef z_stream FAR * z_streamp ;
该结构作为参数执行接下来的函数,传递解压缩的必要信息,比如:目标地址,数量,原始地址数量,写入数量,回调函数(目前不知道这个回调函数是干嘛的)。
     
err = deflateInit (& c_stream , Z_BEST_SPEED );           《==》     err = inflateInit (& d_stream );
err = deflate (& c_stream , Z_NO_FLUSH );                《==》     err = inflate (& d_stream , Z_NO_FLUSH );
err = deflateEnd (& c_stream );                         《==》     err = inflateEnd (& d_stream );

  • 压缩数据也是支持直接读写的。用处的话感觉就是你可以写一个字符马上被压缩,读出来的字节也经过了解压。最后形成的是一个压缩文件。
相关结构gzFile, z_off_t;
相关函数:gzopen(),  gzputc,  gzputs,  gzprintf,  gzseek,  gzcolose,  gzread, gzungetc, gzgetc, gzgets。使用方法跟C语言中带的文件读写差不多。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值