сжатый файл IO в C ++ - PullRequest
       13

сжатый файл IO в C ++

2 голосов
/ 02 апреля 2012

У меня есть симуляция, в которой мне нужно выгрузить большой объем данных, обычно порядка ~ 50 ГБ или около того, пока выполняется код, что обычно происходит порядка нескольких недель. Прямо сейчас я экспортирую данные в виде legacy ASCII VTK файлов.

Мне было интересно, есть ли способ сжать данные во время их записи на диск, чтобы я мог сэкономить место (мне нужно запустить несколько версий кода одновременно). Я предпочитаю что-то из стандартной библиотеки, если это возможно.

1 Ответ

3 голосов
/ 02 апреля 2012

если вы можете использовать boost, посмотрите на фильтр zlib компрессор и декомпрессор

#include <fstream>
#include <iostream>
#include <boost/iostreams/filtering_streambuf.hpp>
#include <boost/iostreams/copy.hpp>
#include <boost/iostreams/filter/zlib.hpp>

int main() 
{
    using namespace std;

    ifstream file("hello.z", ios_base::in | ios_base::binary);
    filtering_streambuf<input> in;
    in.push(zlib_decompressor());
    in.push(file);
    boost::iostreams::copy(in, cout);
}
...