Повысить iostreams принять подпоток
Я следовал этому примеру о том, как распаковать файл 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
,