Boost::iostreams 庫編譯和壓縮資料流
摘要
好記憶不如爛筆頭,很多時候當時明明弄得很透徹的東西,很可能過段時間就全部的忘記了。
內容
- 1. iostreams庫編譯和簡介
- 2. boost流
- 3. boost 資料流壓縮
1. iostreams 庫編譯
Boost.Iostreams 有三個目標:
- 提供一個定義 Filters過濾器 的框架,將它們用於標準流和流緩衝。
- 提供一組可用的過濾器、來源和接收器。
例如,Boost.Iostreams 可用於建立訪問TCP連線的流,或者用作加密和資料壓縮的框架。本庫包括以下元件:訪問 記憶體映象檔案,用作業系統的 檔案描述符 進行檔案訪問,程式碼轉換,用 正則表示式 進行文字過濾,
上面是官方文件對boost.iostreams庫,簡要的概括和用途介紹,這裡我主要介紹下後面zlib,gzip格式壓縮解壓。
先介紹一下iostreams庫編譯build
變數 | 解釋 | 預設 |
---|---|---|
NO_COMPRESSION |
關閉壓縮過濾器的支援 | - |
NO_BZIP2 |
關閉 bzip2 過濾器的支援 | 1 (Windows) |
BZIP2_BINARY |
libbz2 二進位制檔案的名字,不包括副檔名,及UNIX的 "lib" 字首。對於 Windows, 如果連結 libbz2 的動態構建,指定匯入庫的名字 | bz2 (UNIX)libbz2 |
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原始碼包。
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連線的流,或者用作加密和資料壓縮的框架,可以將通訊中的資料流進行壓縮,或者加上一些加密演算法從而達到傳輸效率和傳輸安全效能上的提高。
參考文章: boost 官方文件