2012-12-10 34 views
5

我有我一直在使用升壓輸入輸出流和過濾流緩衝帶的zlib壓縮數據的大文件:升壓IO流和zlib加快

boost::iostreams::array_source uncompressedArray(reinterpret_cast< const char* >(&uncompressedData[0]), uncompressedData.size()); 

boost::iostreams::filtering_streambuf<boost::iostreams::output> out; 
out.push(*m_compressor); 
out.push(boost::iostreams::char_back_inserter(compressedData)); 
boost::iostreams::copy(uncompressedArray, out); 

對於速度,我初始化zlib庫有以下幾點:

boost::iostreams::zlib_params params; 
params.level = boost::iostreams__zlib::best_speed; 
params.mem_level = 9; 

m_compressor.reset(new boost::iostreams::zlib_compressor(params, 131072)); 
m_decompressor.reset(new boost::iostreams::zlib_decompressor(params, 131072)); 

我解是這樣的:

boost::iostreams::array_source compressedArray(reinterpret_cast< const char* >(&compressedData[0]), compressedData.size()); 

boost::iostreams::filtering_streambuf<boost::iostreams::input> m_in; 
m_in.push(*m_decompressor); 
m_in.push(compressedArray);  
boost::iostreams::copy(m_in, boost::iostreams::char_back_inserter(uncompressedData)); 

我的問題是是否有一個有哪些方法可以加速充氣(解壓縮)操作?目前,壓縮需要大約83%的數據訪問時間,我真的需要更快地實現這一點。任何建議將不勝感激。

回答

3

加速解壓縮的唯一方法是使壓縮數據更小,因此處理更少。這意味着花費更多時間進行壓縮,假設您不關心處理時間。所以你會選擇最好的壓縮。

1

至少在Windows上,我們使用zlib C接口測量了20%的改進。關閉分析後發現boost :: iostreams :: filtering_streambuf & iostream開銷是主要區別。