Как записать двоичные данные в сжатый файл

У меня есть некоторые финансовые данные, которые я обрабатываю в C ++. Я храню его в простом двоичном формате, потому что он требует меньше ресурсов и работает быстро, однако я хотел бы добавить сжатие к файлу. Я предполагаю, что я буду связан с IO, поэтому сжатие не будет стоить мне дорого с точки зрения скорости обработки.

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

I have my data in a structure like this:

struct TradesBin {
int ttim;
int prc;
int siz;
short int g127;
short int corr;
char cond[2];
char ex[1];
}__attribute__((packed));

Который я могу записать в двоичный файл следующим образом:

ofstream fout(outfile.c_str(), ios::out | ios::binary);
fout.write((char *) &tbin, sizeof(TradesBin));

Где tbin заполнен данными TradesBin.

Как мне теперь добавить сжатие к этим файлам? Я слышал лишь смутно о таких вещах, как ZLO, Bzip2, zlib и Boost.IOStreams. Я очень ценю ваше руководство и предложения!

Спасибо!

1

Решение

Zlib позволяет вам делать это, но предоставляет только простой интерфейс на языке C. Короче говоря, вы делаете

gzFile fp = gzopen(fname.c_str(),"wb");
gzwrite(fp, (void*) (&vec[0]), sizeof(TradesBin)*nelem);
gzclose(fp);

где vec будет, например, std::vector<TradesBin> для тебя TradesBin состав.

2

Другие решения

Других решений пока нет …