Я использую boost :: iostreams filtering_stream для реализации моего собственного формата архива. Этот формат должен поддерживать различные алгоритмы сжатия, чтобы каждый файл можно было сжать с использованием другого метода.
С этой целью я сохраняю глобальный поток для чтения (или записи) и добавляю или удаляю фильтры по мере необходимости. Однако неясно, возможно ли на самом деле добавление и удаление фильтров на лету.
По сути, я пытаюсь сделать что-то вроде этого:
void ArchiveFile::readFromStream( std::istream& inputStream, unsigned filters )
{
// create the filtered stream
boost::iostreams::filtering_istream in;
if ( filters & FILTERS_BZIP )
{
in.push( boost::iostreams::bzip2_decompressor() );
}
// add the source stream
in.push( inputStream );
// read file content
in.read( &mFileContent[0], mFileSize );
}
Я вызываю readFromStream для каждого файла, используя тот же inputStream. Тем не менее, я продолжаю получать тарабарщину, даже если не использую фильтр. Когда я напрямую использую inputStream, файл читается нормально.
Что я делаю не так?