我正在按照this示例解压缩bzip2文件:
#include <fstream>
#include <iostream>
#include <boost/iostreams/filtering_streambuf.hpp>
#include <boost/iostreams/copy.hpp>
#include <boost/iostreams/filter/bzip2.hpp>
int main()
{
using namespace std;
using namespace boost::iostreams;
ifstream file("hello.bz2", ios_base::in | ios_base::binary);
filtering_streambuf<input> in;
in.push(bzip2_decompressor());
in.push(file);
boost::iostreams::copy(in, cout);
}
假设我有一个bz2格式的大文本文件。是否可以从in
中创建从第二行开始到最后一行之前停止的子流?还是仅将给定尺寸复制到cout
?考虑由
echo -e "First\nSecond\nThird\nForth" | bzip2 > hello.bz2
是否可以仅将第二行和第三行复制到cout
而不将整个未压缩的文件读入缓冲区?
我尝试了boost::iostreams::restrict
,但后来得到了no random access: iostream error
。