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