我會很簡短:我有這樣一段代碼:壓縮/解壓縮的gzip到內存與提振
QByteArray MyNBT::decompressData(QByteArray data)
{
filtering_streambuf<input> in;
std::string _data = data.data();
in.push(gzip_decompressor());
in.push(boost::iostreams::back_inserter(_data));
//in.push(std::back_inserter(_data));
std::stringstream _sstream;
boost::iostreams::copy(in, _sstream);
QByteArray out = _sstream.rdbuf()->str().c_str();
return out;
}
而且它在這條線(S)給出了一個錯誤:
in.push(boost::iostreams::back_inserter(_data));
//in.push(std::back_inserter(_data));
錯誤是:
/usr/include/boost/iostreams/chain.hpp:244: error: invalid application of 'sizeof' to incomplete type 'boost::STATIC_ASSERTION_FAILURE<false>'
BOOST_STATIC_ASSERT((is_convertible<category, Mode>::value));
^
的編譯器曾在std::back_inserter(_data)
和兩次拋出這個錯誤有增強的一個。
在此先感謝。
現在編譯,但它在拋出一個異常運行時'gzip錯誤'。我使用的gzip是可以的。我試過你的代碼,我製作的一些gzip(並用其他工作實例測試過)... – azteca1998
我假設你現在指的是你的代碼,而不是我的(我測試過它)。我只能猜測,zip數據已損壞。也許你沒有使用二進制流或運行到終止NUL字符沿路 – sehe
我的代碼讀取所有的二進制文件到一個字符串,它之間的一些函數(不改變它)之間傳遞,然後如果我把它標記爲壓縮,函數上面解壓縮它。非常簡單。 – azteca1998