我是靠谱客的博主 害羞砖头,最近开发中收集的这篇文章主要介绍ZLib 解压缩工具,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

官网: http://www.zlib.net/
功能:压缩一段字节流,但是不包含任何文件信息。所以如果要编写压缩数据,还要自定义头部信息之类的,自己生成对应的文件结构
设计: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语言中带的文件读写差不多。

最后

以上就是害羞砖头为你收集整理的ZLib 解压缩工具的全部内容,希望文章能够帮你解决ZLib 解压缩工具所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(37)

评论列表共有 0 条评论

立即
投稿
返回
顶部