zlib类库提供了很多种压缩和解压缩的方式,由于时间的关系我只学习一下内容,以下是我在实现web 服务器压缩数据网页中使用到一些函数和常用数据结构、常量等。

zlib使用过程

压缩过程:deflateInit() ->deflate() ->deflateEnd();  对应的解压过程 inflateInit() ->  inflate() ->  inflateEnd(); 
压缩过程:deflateInit2() ->deflate() ->deflateEnd();  对应的解压过程 inflateInit2() ->  inflate() ->  inflateEnd(); 

zlib使用的实例请看:
http://www.zlib.net/zlib_how.html 注释内容详细(英文)

web服务器是如何通过压缩数据,web服务器的gzip模块的实现  我自己写的(中文)

zlib解压缩的实现实例(来自百度百科,本人未加正式,请谅解)


常用的数据结构
typedef struct z_stream_s {
    z_const Bytef *next_in;     //要压缩数据的首地址
    uInt     avail_in;  //压缩数据的长度
    uLong    total_in;  //压缩数据缓冲区的长度

    Bytef    *next_out; //压缩数据保存位置。
    uInt     avail_out; //存放压缩数据位置的首地址
    uLong    total_out; //存放压缩数据位置的大小

    z_const char *msg;  //存放最近的错误信息,NULL表示没有错误
    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;  // 表示数据类型,文本或者二进制
    uLong   adler;      /* adler32 value of the uncompressed data */
    uLong   reserved;   /* reserved for future use */
} z_stream;
对于z_stream我们一般使用
        z_stream stream;
        在deflateInit()或者inflateInit()前设置的参数,初始化参数设置
        stream.zalloc = Z_NULL;
stream.zfree = Z_NULL;
stream.opaque = Z_NULL;
stream.avail_in = 0;
stream.next_in = Z_NULL;
        在deflate()或inflate前设置的参数,压缩前的参数设置
        strm.avail_in = in_len;
        strm.next_in = in;
        strm.avail_out = out_len;
        strm.next_out = out;
常用的常量
用来设置压缩和解压缩时,结果数据输出的方式,具体区别没有看懂的(为了避免误导大家,大家尽量看http://www.zlib.net/manual.html英文帮助吧)

#define Z_NO_FLUSH      0  //没有缓存,直接写入到结果中
#define Z_PARTIAL_FLUSH 1   
#define Z_SYNC_FLUSH    2    
#define Z_FULL_FLUSH    3
#define Z_FINISH        4    //采用此种方式,压缩将会变成单步执行。
#define Z_BLOCK         5
#define Z_TREES         6

函数返回值得定义

#define Z_OK            0
#define Z_STREAM_END    1
#define Z_NEED_DICT     2
#define Z_ERRNO        (-1)
#define Z_STREAM_ERROR (-2)
#define Z_DATA_ERROR   (-3)
#define Z_MEM_ERROR    (-4)
#define Z_BUF_ERROR    (-5)
#define Z_VERSION_ERROR (-6)
注释:负值是错误,正值用于特别,但正常活动。

定义常用的压缩级别
#define Z_NO_COMPRESSION         0
#define Z_BEST_SPEED             1
#define Z_BEST_COMPRESSION       9
#define Z_DEFAULT_COMPRESSION  (-1)
注释:压缩级别是一个0-9的数字,0压缩速度最快(压缩的过程),9压缩速度最慢,压缩率最大,0不压缩数据

压缩算法的选择
#define Z_FILTERED            1    //Huffman编码和字符串匹配结合
#define Z_HUFFMAN_ONLY        2  //仅采用霍夫曼编码,没有字符匹配
#define Z_RLE                 3    //限制相匹配的距离为1
#define Z_FIXED               4
#define Z_DEFAULT_STRATEGY    0  //默认压缩方法。

Possible values of the data_type field (though see inflate()).

#define Z_BINARY   0
#define Z_TEXT     1
#define Z_ASCII    Z_TEXT   /* for compatibility with 1.2.2 and earlier */
#define Z_UNKNOWN  2

默认的压缩方式,仅支持当前一种

#define Z_DEFLATED   8

常用的函数
int deflateInit ((z_streamp strm, int level));
include: zlib.h
description: 初始化压缩状态,关联相关的z_stream数据结构和压缩比例
parameter:
    strm: 要关联的z_stream数据结构
    level:压缩比例,压缩级别是一个0-9的数字,0压缩速度最快(压缩的过程),9压缩速度最慢,压缩率最大,0不压缩数据

int deflateInit2 ((z_streamp strm, //关联的数据结构
                               int  level,   
                               int  method,
                               int  windowBits,
                               int  memLevel,
                                int  strategy));
include: zlib.h
description: 压缩的初始化
parameter:
    strm:关联的数据结构    
    level:压缩级别,压缩级别是一个0-9的数字,0压缩速度最快(压缩的过程),9压缩速度最慢,压缩率最大,0不压缩数
    method:压缩的模式,现在只有一种。Z_DEFLATED(表示数字8)
    windowBits:表示处理raw deflate的方法。windowBits为8..15,也可以为-8...-15。当值为16时,将会加上一个简单gzip头部和尾部。
    memLevel:指定的内部压缩状态,应该分配多少内存。 memLevel=1使用的最小内存,但很慢,降低了压缩比; memLevel=9使用的最大内存以获得最佳的速度。默认值是8。请参阅作为的函数windowBits和memLevel的使用的总内存zconf.h。
    strategy:压缩的策略
int deflate ((z_streamp strm, int flush));
include: zlib.h

description: 压缩数据
parameter:
    strm: 关联的数据结构,要压缩的数据、长度、压缩数据的存放位置和可用大小,都在其中设置的
    flush: 采用何种法师将压缩的数据写到缓冲区中。

int deflateEnd ((z_streamp strm))
include: zlib.h
description: 压缩结束
parameter:
    strm: 关联的数据结构,释放资源

【神经网络与深度学习】ZLIB介绍的更多相关文章

  1. (转)神经网络和深度学习简史(第一部分):从感知机到BP算法

    深度|神经网络和深度学习简史(第一部分):从感知机到BP算法 2016-01-23 机器之心 来自Andrey Kurenkov 作者:Andrey Kurenkov 机器之心编译出品 参与:chen ...

  2. 对比《动手学深度学习》 PDF代码+《神经网络与深度学习 》PDF

    随着AlphaGo与李世石大战的落幕,人工智能成为话题焦点.AlphaGo背后的工作原理"深度学习"也跳入大众的视野.什么是深度学习,什么是神经网络,为何一段程序在精密的围棋大赛中 ...

  3. 深度学习与CV教程(8) | 常见深度学习框架介绍

    作者:韩信子@ShowMeAI 教程地址:http://www.showmeai.tech/tutorials/37 本文地址:http://www.showmeai.tech/article-det ...

  4. [DeeplearningAI笔记]神经网络与深度学习人工智能行业大师访谈

    觉得有用的话,欢迎一起讨论相互学习~Follow Me 吴恩达采访Geoffrey Hinton NG:前几十年,你就已经发明了这么多神经网络和深度学习相关的概念,我其实很好奇,在这么多你发明的东西中 ...

  5. 【吴恩达课后测验】Course 1 - 神经网络和深度学习 - 第二周测验【中英】

    [中英][吴恩达课后测验]Course 1 - 神经网络和深度学习 - 第二周测验 第2周测验 - 神经网络基础 神经元节点计算什么? [ ]神经元节点先计算激活函数,再计算线性函数(z = Wx + ...

  6. 【吴恩达课后测验】Course 1 - 神经网络和深度学习 - 第一周测验【中英】

    [吴恩达课后测验]Course 1 - 神经网络和深度学习 - 第一周测验[中英] 第一周测验 - 深度学习简介 和“AI是新电力”相类似的说法是什么? [  ]AI为我们的家庭和办公室的个人设备供电 ...

  7. 如何理解归一化(Normalization)对于神经网络(深度学习)的帮助?

    如何理解归一化(Normalization)对于神经网络(深度学习)的帮助? 作者:知乎用户链接:https://www.zhihu.com/question/326034346/answer/730 ...

  8. 【神经网络与深度学习】卷积神经网络(CNN)

    [神经网络与深度学习]卷积神经网络(CNN) 标签:[神经网络与深度学习] 实际上前面已经发布过一次,但是这次重新复习了一下,决定再发博一次. 说明:以后的总结,还应该以我的认识进行总结,这样比较符合 ...

  9. 【神经网络与深度学习】【CUDA开发】caffe-windows win32下的编译尝试

    [神经网络与深度学习][CUDA开发]caffe-windows win32下的编译尝试 标签:[神经网络与深度学习] [CUDA开发] 主要是在开发Qt的应用程序时,需要的是有一个使用的库文件也只是 ...

  10. 【神经网络与深度学习】【Matlab开发】caffe-windows使能Matlab2015b接口

    [神经网络与深度学习][Matlab开发]caffe-windows使能Matlab2015b接口 标签:[神经网络与深度学习] [Matlab开发] 主要是想全部来一次,所以使能了Matlab的接口 ...

随机推荐

  1. Laravel进行数据库迁移(migration)

    迁移(migration) 文档的简介是:迁移就像数据库的版本控制,允许团队简单轻松的编辑并共享应用的数据库表结构,迁移通常和 Laravel 的结构构建器结对从而可以很容易地构建应用的数据库表结构. ...

  2. electron-vue [Vue warn]: Failed to resolve directive: decorator

    electron-vue引入ant-desigin-vue使用ant自定义指令 v-decorator报销 <a-form-item> <a-input v-decorator=&q ...

  3. [人物存档]【AI少女】【捏脸数据】甜美粉色

    点击下载(城通网盘):AISChaF_20191028024804811.png

  4. C# 检测 代码耗时

    static void SubTest() { Stopwatch sw = new Stopwatch(); sw.Start(); //耗时巨大的代码 sw.Stop(); TimeSpan ts ...

  5. java 项目 文件关系 扫描 注释注入(3)

    @RequestParam和@PathVariable用法小结  https://www.cnblogs.com/helloworld-hyyx/p/5295514.html(copy) @Reque ...

  6. web文件夹上传源码

    文件夹数据库处理逻辑 publicclass DbFolder { JSONObject root; public DbFolder() { this.root = new JSONObject(); ...

  7. BZOJ 3270: 博物馆 概率与期望+高斯消元

    和游走挺像的,都是将概率转成期望出现的次数,然后拿高斯消元来解. #include <bits/stdc++.h> #define N 23 #define setIO(s) freope ...

  8. POJ 2109 Power of Cryptography 数学题 double和float精度和范围

    Power of Cryptography Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 21354 Accepted: 107 ...

  9. 中国剩余定理及其拓展 CRT&EXGCD

    中国剩余定理,又叫孙子定理. 作为一个梗广为流传.其实它的学名叫中国单身狗定理. 中国剩余定理 中国剩余定理是来干什么用的呢? 其实就是用来解同余方程组的.那么什么又是同余方程组呢. 顾名思义就是n个 ...

  10. Nginx事件管理之事件处理流程

    1. 概述 事件处理要解决的两个问题: "惊群" 问题,即多个 worker 子进程监听相同端口时,在 accept 建立新连接时会有争抢,引发不必要的上下文切换, 增加系统开销. ...