?
/*
??? Zlib 是常用的壓縮庫,在很多平臺上使用,是用c和部分匯編完成的,提供的是基于c接口的使用函數(shù)
在zlib 的contrib中提供了三種基于iostream的使用方式.
?
?? 在MFC中,經(jīng)常使用CFile進行文件的讀寫操作,在這種時候,如果想使用Zlib的話,要么使用zlib自身
提供的操作函數(shù),要么使用zlib contrib中iostream操作流.或者自己對zlib進行封裝.
?
所以我對zlib進行了封裝,便于使用.
?
Filter 功能類
zlib_compress_filter<int 壓縮級別> 實現(xiàn)壓縮功能類,根據(jù)模板參數(shù)實現(xiàn)不同的壓縮程度.??
zlib_uncompress_filter<int >? 實現(xiàn)解壓功能類,模板參數(shù)總為 1
Filter類自身帶有 緩沖區(qū), 可以存儲處理后的數(shù)據(jù),用戶可以直接通過這兩個Filter類對數(shù)據(jù)進行
壓縮和解壓縮操作.
?
Pipe類
??? 為了和MFC中的CFile類進行配接,對數(shù)據(jù)進行處理后,把CFile作為最后接受數(shù)據(jù)的容器,類似于
Boost庫中的Sink,提供了一個模板實現(xiàn)的BufferPipe模板類.
?
template <typename filter,typename buffer_type, typename next_pipe> class BufferPipe;
模板參數(shù):
filter? 數(shù)據(jù)處理用filter
buffer_type 緩沖類型
next_pipe 后面接的pipe,可以是CFile,用于最終寫入磁盤.
?
?
Pipe后還可以接一個Pipe,可以象一個管子連接起來,并且,以后通過擴充filter可以實現(xiàn)不同的數(shù)據(jù)操作功能.
?
提供了一個測試代碼
編譯后一個對話框 四個 按鈕
?
按鈕1 將 c:\a.bmp? 壓縮為 c:\b.cr???? 使用filter
按鈕2 將 c:\b.cr? 解壓縮為 c:\c.bmp?? 使用filter
按鈕3 將 c:\a.bmp 壓縮為 c:\d.cr?? 使用pipe功能
按鈕4 將 c:\a.bmp? 通過壓縮和解壓縮管道, 存儲為 e.bmp應該和a.bmp相同,用于測試管道的連接功能.?
?
代碼位置:
http://www.shnenglu.com/files/hdqqq/z_file.rar
編譯需要的zlib 請自行到該庫的網(wǎng)站下載.
這個文章實現(xiàn)的和boost中的filter類似的功能,可以和MFC配合使用.
不足:
fiter 使用的 buf_holder寫得比較粗糙,以后有機會的話,改進.
*/
?