acl  3.5.3.0
acl::zlib_stream类 参考

#include <zlib_stream.hpp>

+ 类 acl::zlib_stream 继承关系图:
+ acl::zlib_stream 的协作图:

Public 成员函数

 zlib_stream (void)
 
 ~zlib_stream (void)
 
bool zlib_compress (const char *in, int len, string *out, zlib_level_t level=zlib_default)
 
bool zlib_uncompress (const char *in, int len, string *out, bool have_zlib_header=true, int wsize=15)
 
bool zip_begin (zlib_level_t level=zlib_default, int wbits=zlib_wbits_15, zlib_mlevel_t mlevel=zlib_mlevel_9)
 
bool zip_update (const char *in, int len, string *out, zlib_flush_t flag=zlib_flush_off)
 
bool zip_finish (string *out)
 
bool zip_reset (void)
 
unsigned crc32_update (unsigned n, const void *buf, size_t dlen)
 
bool unzip_begin (bool have_zlib_header=true, int wsize=15)
 
bool unzip_update (const char *in, int len, string *out, zlib_flush_t flag=zlib_flush_off)
 
bool unzip_finish (string *out)
 
bool unzip_reset (void)
 
z_streamget_zstream (void) const
 
bool pipe_zip_begin (zlib_level_t level=zlib_default, zlib_flush_t flag=zlib_flush_off)
 
bool pipe_unzip_begin (zlib_flush_t flag=zlib_flush_off)
 
virtual int push_pop (const char *in, size_t len, string *out, size_t max=0)
 
virtual int pop_end (string *out, size_t max=0)
 
virtual void clear (void)
 
- Public 成员函数 继承自 acl::pipe_stream
 pipe_stream ()
 
virtual ~pipe_stream ()
 

静态 Public 成员函数

static void set_loadpath (const char *path)
 
static const char * get_loadpath (void)
 
static bool zlib_load_once (void)
 

额外继承的成员函数

- Protected 成员函数 继承自 acl::acl::noncopyable
 noncopyable ()
 
 ~noncopyable ()
 

详细描述

在文件 zlib_stream.hpp77 行定义.

构造及析构函数说明

◆ zlib_stream()

acl::zlib_stream::zlib_stream ( void  )

◆ ~zlib_stream()

acl::zlib_stream::~zlib_stream ( void  )

成员函数说明

◆ clear()

virtual void acl::zlib_stream::clear ( void  )
virtual

重载 acl::pipe_stream .

◆ crc32_update()

unsigned acl::zlib_stream::crc32_update ( unsigned  n,
const void *  buf,
size_t  dlen 
)

在压缩过程中可使用此函数计算数据的 crc32 校验值

参数
n{unsigned} 上次计算的校验和值,第一次时可写 0
buf{const void*} 需要校验的数据地址,第一次使用时写 NULL
dlen{size_t} buf 数据的长度,第一次使用时写 0
返回
{unsinged} 本次计算的校验和值

◆ get_loadpath()

static const char* acl::zlib_stream::get_loadpath ( void  )
static

当设置了动态库的动态加载全路径时,可以通过本函数获得动态库加载全路径

返回
{const char*} 当未设置时则返回 NULL

◆ get_zstream()

z_stream* acl::zlib_stream::get_zstream ( void  ) const
inline

获得当前的 zstream 对象

返回
{z_stream*}

在文件 zlib_stream.hpp231 行定义.

232  {
233  return zstream_;
234  }

◆ pipe_unzip_begin()

bool acl::zlib_stream::pipe_unzip_begin ( zlib_flush_t  flag = zlib_flush_off)

◆ pipe_zip_begin()

bool acl::zlib_stream::pipe_zip_begin ( zlib_level_t  level = zlib_default,
zlib_flush_t  flag = zlib_flush_off 
)

◆ pop_end()

virtual int acl::zlib_stream::pop_end ( string out,
size_t  max = 0 
)
virtual

实现了 acl::pipe_stream.

◆ push_pop()

virtual int acl::zlib_stream::push_pop ( const char *  in,
size_t  len,
string out,
size_t  max = 0 
)
virtual

实现了 acl::pipe_stream.

◆ set_loadpath()

static void acl::zlib_stream::set_loadpath ( const char *  path)
static

当采用动态加载方式加载动态库时,可以使用此函数设置动态库的加载全路径

◆ unzip_begin()

bool acl::zlib_stream::unzip_begin ( bool  have_zlib_header = true,
int  wsize = 15 
)

开始解压缩过程,如果采用流式解压缩方式,则调用顺序必须是: unzip_begin->unzip_update->unzip_finish,如果中间任何一个 过程失败,则应该调用 unzip_reset

参数
have_zlib_header{bool} 是否有 zlib_header 头,对 HTTP 传输协议而言应该将此值设为 false
wsize{int} 解压过程中的滑动窗口大小
返回
{bool} 解压缩初始化过程是否成功,失败的原因一般 应该是输入的参数非法

◆ unzip_finish()

bool acl::zlib_stream::unzip_finish ( string out)

调用本函数表示解压缩过程结束

参数
out{string} 用户缓冲区,该函数会将 zlib 库缓冲区中 的数据以添加的方式都刷新至用户缓冲区
返回
{bool} 是否成功

◆ unzip_reset()

bool acl::zlib_stream::unzip_reset ( void  )

重置解压缩器状态,一般只有当解压缩过程出错时才会调用本函数

返回
{bool} 是否成功

◆ unzip_update()

bool acl::zlib_stream::unzip_update ( const char *  in,
int  len,
string out,
zlib_flush_t  flag = zlib_flush_off 
)

循环调用此函数对源数据进行解压缩

参数
in{const char*} 压缩的源数据
len{int} 源数据长度
out{string*} 用户缓冲区,该函数以添加方式往用户 提供的缓冲区中添加解压的结果,用户应该自行判断调用本函数 前后的缓冲区长度,以确定由该函数添加的数据长度,由于所 选择的 zlib_flush_t 的不同,该缓冲区中数据可能未必存取 所有的结果
flag{zlib_flush_t} 解压缩过程中的数据缓冲方式 zlib_flush_off: 数据结果可能不会立即刷新至用户缓冲区, zlib 库本身决定刷新的方式 zlib_flush_partial: 数据结果可能会部分刷新至用户缓冲区 zlib_flush_sync: 数据数据同步刷新至用户缓冲区 zlib_flush_full: 将 zlib 库缓冲数据结果全部刷新至用户缓冲区 zlib_flush_finish: 调用本参数后表明解压缩过程结束,同时会将 所有结果数据刷新至用户缓冲区,一般该参数不需要调用,因为在 调用 zip_finish 后,会自动将所有的缓冲数据刷新至用户缓冲区
返回
{bool} 解压缩过程是否失败

◆ zip_begin()

bool acl::zlib_stream::zip_begin ( zlib_level_t  level = zlib_default,
int  wbits = zlib_wbits_15,
zlib_mlevel_t  mlevel = zlib_mlevel_9 
)

开始压缩过程,如果采用流式压缩方式,则调用顺序必须是: zip_begin->zip_update->zip_finish,如果中间任何一个 过程失败,则应该调用 zip_reset

参数
level{zlib_level_t} 压缩级别,级别越高,则压缩比 越高,但压缩速度越低
wbits{zlib_wbits_t} 压缩过程中的滑动窗口级别,值越大,则 压缩效率越高且使用内存越多,针对 HTTP 数据压缩传输,应该采用该 值的负值,如:-zlib_wbits_15
mlevel{zlib_mlevel_t} 压缩过程中的内存分配策略,值越大, 则压缩效率越高且内存使用越多
返回
{bool} 压缩初始化过程是否成功,失败的原因一般 应该是输入的参数非法

◆ zip_finish()

bool acl::zlib_stream::zip_finish ( string out)

调用本函数表示压缩过程结束

参数
out{string} 用户缓冲区,该函数会将 zlib 库缓冲区中 的数据以添加的方式都刷新至用户缓冲区
返回
{bool} 是否成功

◆ zip_reset()

bool acl::zlib_stream::zip_reset ( void  )

重置压缩器状态,一般只有当压缩过程出错时才会调用本函数

返回
{bool} 是否成功

◆ zip_update()

bool acl::zlib_stream::zip_update ( const char *  in,
int  len,
string out,
zlib_flush_t  flag = zlib_flush_off 
)

循环调用此函数对源数据进行压缩

参数
in{const char*} 源数据
len{int} 源数据长度
out{string*} 用户缓冲区,该函数以添加方式往用户 提供的缓冲区中添加压缩的结果,用户应该自行判断调用本函数 前后的缓冲区长度,以确定由该函数添加的数据长度,由于所 选择的 zlib_flush_t 的不同,该缓冲区中数据可能未必存取 所有的结果
flag{zlib_flush_t} 压缩过程中的数据缓冲方式 zlib_flush_off: 数据结果可能不会立即刷新至用户缓冲区, zlib 库本身决定刷新的方式,从而可能会获得较高的压缩比 zlib_flush_partial: 数据结果可能会部分刷新至用户缓冲区 zlib_flush_sync: 数据数据同步刷新至用户缓冲区 zlib_flush_full: 将 zlib 库缓冲数据结果全部刷新至用户缓冲区 zlib_flush_finish: 调用本参数后表明压缩过程结束,同时会将 所有结果数据刷新至用户缓冲区,一般该参数不需要调用,因为在 调用 zip_finish 后,会自动将所有的缓冲数据刷新至用户缓冲区
返回
{bool} 压缩过程是否失败

◆ zlib_compress()

bool acl::zlib_stream::zlib_compress ( const char *  in,
int  len,
string out,
zlib_level_t  level = zlib_default 
)

非流式压缩

参数
in{const char*} 源数据
len{int} 源数据长度
out{string*} 存储压缩结果的用户缓冲区
level{zlib_level_t} 压缩级别,级别越高则压缩比越高, 但压缩速度越低
返回
{bool} 压缩过程是否成功

◆ zlib_load_once()

static bool acl::zlib_stream::zlib_load_once ( void  )
static

手动调用动态加载 zlib 库方法,如果为静态链接,则无需调用本方法, 此外,如果 zlib 动态库不在程序运行目录下时,需要先调用上面的 set_loadpath() 方法设置 zlib 动态库的全路径; 该方法内部通过 pthread_once() 保证互斥调用,所以即使同时被多个 线程调用也是安全的

返回
{bool} 加载是否成功

◆ zlib_uncompress()

bool acl::zlib_stream::zlib_uncompress ( const char *  in,
int  len,
string out,
bool  have_zlib_header = true,
int  wsize = 15 
)

非流式解压缩

参数
in{const char*} 源压缩数据
len{int} 源数据长度
out{string*} 存储解压缩结果的用户缓冲区
have_zlib_header{bool} 是否有 zlib_header 头,对 HTTP 传输协议而言应该将此值设为 false
wsize{int} 解压过程中的滑动窗口大小
返回
{bool} 解压缩过程是否成功

该类的文档由以下文件生成: