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