ZLib 解压缩工具

news/2024/10/20 16:08:41/
官网: 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语言中带的文件读写差不多。

http://www.ppmy.cn/news/546980.html

相关文章

在解压缩某些文件时出现问题检查计算机上,rar文件解压缩失败解压末端出现错误的解决方法...

附件经常会是一系列的压缩文件,下载是默认文件名是一个随机数字。 因而下载完会出现压缩文件解压缩失败 解决方法:下载时重命名为带一定顺序的文件名,如文件1,文件2,文件3等 如何解决单个文件解压失败? 论坛中的许多资料都是使用RAR压缩的,上传到下载,在解压过程中可能…

解压缩文件常用命令——linux

解压缩文件常用命令——linux 解压缩文件命令1. 解压缩jar包(1)解压 jar(2)压缩 jar(3)部分参数说明 2.解压缩war包(1)解压 war(2)压缩 jar 3.解压缩tar包&am…

Linux之压缩解压缩

1 Linux上常见的压缩命令: (1)Linux上常见压缩文件扩展名: *.Z: compress程序压缩文件,目前使用较少。已经有gzip替换了。 *.gz: gzip程序压缩的文件。 *.bz2:bzip2程序压缩的文件,比gzip的压缩比更好。 无…

哈夫曼压缩与解压缩(c语言版)

目录 哈夫曼压缩与解压缩(c语言版) 一:引言 二:主要原理 三:主要技术点 四:实现过程 1.压缩: 2.解压缩: 五:详细分析,及代码实现 哈夫曼压缩与解压缩…

Linux账号和口令加固

1 禁用或删除无用账号 减少系统无用账号,降低安全风险。 操作步骤 使用命令删除不必要的账号。 userdel 使用命令锁定不必要的账号。 passwd -l 3.使用命令解锁必要的账号。 passwd -u 2 检查特殊账号 检查是否存在空口令和root权限的账号。 操作步骤 查看空…

linux解压缩命令 gz,linux的gz解压缩命令是什么

linux的gz解压缩命令:1、压缩文件,语法为【gzip 源文件】,压缩【b.txt】使用命令【gzip b.txt】;2、解压文件,语法为【gzip -d 压缩文件;gunzip 压缩文件】。 本教程操作环境:linux7.3系统&…

js压缩及解压缩

https://beautifier.io/

Zip压缩解压缩之C++实现。

压缩:可压缩单一文件,也可压缩文件夹里的多个文件(包括文件夹里面的子文件夹)。压缩的目标文件格式无限制:demo文件使用的是.text,.h,.cpp,.png,.bmp,.wav,.mp4等。 解压…