摘要
好记忆不如烂笔头,很多时候当时明明弄得很透彻的东西,很可能过段时间就全部的忘记了。
内容
- 1. iostreams库编译和简介
- 2. boost流
- 3. boost 数据流压缩
1. iostreams 库编译
Boost.Iostreams 有三个目标:
- 提供一个定义 Filters过滤器 的框架,将它们用于标准流和流缓冲。
- 提供一组可用的过滤器、来源和接收器。
例如,Boost.Iostreams 可用于创建访问TCP连接的流,或者用作加密和数据压缩的框架。本库包括以下组件:访问 内存映象文件,用操作系统的 文件描述符 进行文件访问,代码转换,用 正则表达式 进行文本过滤,换行符转换,以及 zlib, gzip 和 bzip2 格式的压缩与解压。
上面是官方文档对boost.iostreams库,简要的概括和用途介绍,这里我主要介绍下后面zlib,gzip格式压缩解压。
先介绍一下iostreams库编译build
其实iostreams大部分属于只依赖头文件,如 stream
, stream_buffer
,filtering_stream
和 filtering_streambuf
Header | Source File | External Library |
---|---|---|
boost/iostreams/device/file_descriptor.hpp |
file_descriptor.cpp |
- |
boost/iostreams/device/mapped_file.hpp |
mapped_file.cpp |
- |
boost/iostreams/filter/bzip2.hpp |
bzip2.cpp |
libbz2 |
boost/iostreams/filter/gzip.hpp |
gzip.cpp , zlib.cpp
|
zlib |
boost/iostreams/filter/regex.hpp |
- | Boost.Regex |
boost/iostreams/filter/zlib.hpp |
zlib.cpp |
zlib |
变量 | 解释 | 缺省 |
---|---|---|
NO_COMPRESSION |
关闭压缩过滤器的支持 | - |
NO_BZIP2 |
关闭 bzip2 过滤器的支持 |
1 (Windows) |
BZIP2_BINARY |
libbz2 二进制文件的名字,不包括文件扩展名,及UNIX的 "lib" 前缀。对于 Windows, 如果链接 libbz2 的动态构建,指定导入库的名字 |
bz2 (UNIX)libbz2 (Windows) |
BZIP2_INCLUDE |
libbz2 头文件的路径,如果它们不是位于可以自动找到的位置 | BZIP2_SOURCE |
BZIP2_LIBPATH |
libbz2 二进制文件的路径,如果它们不是位于可以自动找到的位置。对于 Windows, 如果链接 libbz2 的动态构建,指定导入库的名字 | - |
BZIP2_SOURCE |
Path to the libbz2 源文件的路径,如果它们不是位于可以自动找到的位置 | - |
NO_ZLIB |
关闭 zlib 过滤器的支持 |
1 (Windows) |
ZLIB_BINARY |
zlib 二进制文件的名字,不包括文件扩展名,及UNIX的 "lib" 前缀。对于 Windows, 如果链接 libbz2 的动态构建,指定导入库的名字 |
z (UNIX)zdll (Windows) |
ZLIB_INCLUDE |
zlib 头文件的路径,如果它们不是位于可以自动找到的位置 | ZLIB_SOURCE |
ZLIB_LIBPATH |
zlib 二进制文件的路径,如果它们不是位于可以自动找到的位置。对于 Windows, 如果链接 zlib 的动态构建,指定导入库的名字 | - |
ZLIB_SOURCE |
zlib 源文件的路径,如果它们不是位于可以自动找到的位置 | - |
上面已经说明很清楚,对于压缩流zlib,gzip,bzip2需要依赖外库libbz2和zlib库,当然boost是对zlib库函数基础上进行的封装。
1. 下载zlib和libbz2源码包。
zlib源码包:http://www.zlib.net/
libbz2源码包:http://www.bzip.org/
2. 设置源码包路径
ZLIB_INCLUDE和BZIP2_SOURCE
如在unix下面编译可以设置在环境变量中
export ZLIB_INCLUDE=$INSTALL_PATH export BZIP2_SOURCE=$INSTALL_PATH
下面我们直接编译就好了
./bjam --toolset=gcc --with-iostreams runtime-link=static link=static stage
2. boost流
类模板 stream_buffer
和 stream
实现了标准的流缓冲和流,它们通过委托给内含的 设备 来执行 I/O。可以通过使用成员函数 open
,is_open
和 close
来访问设备,它们提供了类似于标准的基于文件的流和流缓冲的接口。
对于过滤,Boost.Iostreams 提供了模板 filtering_streambuf
和 filtering_stream
. filtering_streambuf
或 filtering_stream
的实例含有过滤器和设备的 chains链
,使用类似于std::stack
的接口来访问。
3. boost 数据流压缩
重点介绍下数据流的压缩,正如前面所说,可用于创建访问TCP连接的流,或者用作加密和数据压缩的框架,可以将通信中的数据流进行压缩,或者加上一些加密算法从而达到传输效率和传输安全性能上的提高。