Как я могу читать построчно, используя интерфейс Boost IOStreams для файлов Gzip?

Мне удалось интегрировать API-интерфейсы Boost Iostream для чтения заархивированных файлов. Я следил за документацией на странице повышения и пока получил следующий код:

std::stringstream outStr;  
ifstream file("file.gz", ios_base::in | ios_base::binary);  
try {  
    boost::iostreams::filtering_istreambuf in;  
    in.push(boost::iostreams::gzip_decompressor());  
    in.push(file);  
    boost::iostreams::copy(in, outStr);  
}  
catch(const boost::iostreams::gzip_error& exception) {  
    int error = exception.error();  
    if (error == boost::iostreams::gzip::zlib_error) {  
       //check for all error code    
    }   
}  

Код работает нормально (поэтому, пожалуйста, не обращайте внимания любые опечатки. и ошибки, указанные выше :)).

  1. Похоже, что приведенный выше код полностью прочитает файл и сохранит его в памяти при создании filtering_istreambuf. Это правда, согласно моему расследованию, мне так кажется? файл читается в память, этот код может быть проблемой для больших файлов (это то, с чем я имею дело).
  2. Мой текущий код читает gzip-архив с помощью gzgets API построчно из zlib. Есть ли способ сделать построчное чтение с использованием Boost API?
16
задан Billy ONeal 21 June 2011 в 05:17
поделиться