加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

zlib 的z_stream结构

(2010-07-14 16:16:03)
标签:

zlib

z_stream

结构

it

typedef struct z_stream_s {
    Bytef    *next_in; 
    uInt     avail_in; 
    uLong    total_in; 

    Bytef    *next_out;
    uInt     avail_out;
    uLong    total_out;

    char     *msg;     
    struct internal_state FAR *state;

    alloc_func zalloc; 
    free_func  zfree;  
    voidpf     opaque; 

    int     data_type; 
    uLong   adler;     
    uLong   reserved;  
} z_stream; 

当avail_in降到0时, 应用程序必须更新next_int和avail_in。当avail_out下降到0时,必须更新 next_out。

在调用初始化函数之前,应用程序必须初始化zalloc,zfree和opaque。其他所有字段都会被压缩库所赋值,而且

不会被应用程序更新。

应用程序提供的opaque的值将被作为调用zalloc和zfree的第一个参数传输出去,这样对配置内存管理器是

有好处的。

如果没有足够的内存空间分配给对象,zalloc必须返回Z_NULL,如果zlib被用作一个多线程应用,zalloc

和zfree必然是安全的。

在16位系统里,zalloc和zfree函数肯定可以分配65536字节的空间,但是如果MAXSEG_64K这个符号被

定义(参照zconf.h),将不会被要求分配更多的空间。警告:在MSDOS上,被zalloc返回的指针,它指向65536

个字节,必须将他们的偏移量规格化为0。被这个库提供的默认的分配函数确保了这些(参照zutil.c)。为了减少内

存需求和避免任何64K对象的分配,在消耗压缩比的情况下,用-DMAX_WBITS=14编译该库(参照zconf.h)。

total_in字段和total_out字段可以被用作统计或者进度报告。压缩完之后,total_in持有为压缩时的数据的

总大小,有可能会被保留用作解压装置。

 

关于deflate函数和inflate函数

ZEXTERN int ZEXPORT deflate OF((z_streamp strm, int flush));
 

 ZEXTERN int ZEXPORT deflateEnd OF((z_streamp strm));

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有