我有一些我在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这样的东西。非常感谢您的指导和建议!
谢谢!
答案 0 :(得分:2)
Zlib允许您这样做,但它只提供一个普通的C接口。简而言之,你做了
gzFile fp = gzopen(fname.c_str(),"wb");
gzwrite(fp, (void*) (&vec[0]), sizeof(TradesBin)*nelem);
gzclose(fp);
其中vec
例如是std::vector<TradesBin>
结构的TradesBin
。