一、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;
压缩初始化:
int deflateInit2 (z_streamp strm,int level,int method,int windowBits,int memLevel, int strategy);
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);
strm:关联的数据结构,要压缩的数据、长度、压缩数据的存放位置和可用大小,都在其中设置的
flush: 采用何种法师将压缩的数据写到缓冲区中。
压缩结束:
int deflateEnd (z_streamp strm);//关联的数据结构
二、URL的组成
http://www.example.com:80/path/to/myfile.html?key1=value1&key2=value2#SomewhereInTheDocument
协议、域名、端口、服务器上的文件路径、参数
三、正则表达式的使用
std::regex pattern("^"+i.first+"|");//定义要匹配的字符
std::cmatch m;//匹配完成得到的结果
bool std::regex_search(url.c_str(),m.pattern);//搜寻