У меня есть некоторые финансовые данные, которые я обрабатываю в 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. Я очень ценю ваше руководство и предложения!
Спасибо!
Zlib позволяет вам делать это, но предоставляет только простой интерфейс на языке C. Короче говоря, вы делаете
gzFile fp = gzopen(fname.c_str(),"wb");
gzwrite(fp, (void*) (&vec[0]), sizeof(TradesBin)*nelem);
gzclose(fp);
где vec
будет, например, std::vector<TradesBin>
для тебя TradesBin
состав.
Других решений пока нет …