c++ - 如何将二进制数据写入压缩文件

标签 c++ zlib compression bzip2 boost-iostreams

我有一些正在用 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 接口(interface)。简而言之,您做到了

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

哪里vec例如 std::vector<TradesBin>为您TradesBin结构。

关于c++ - 如何将二进制数据写入压缩文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12539585/

相关文章:

c++ - 串联加入 3 个 C++ 程序

c - 如何在 Windows 上将 libxml2 与 zlib1 链接?

ios - zLib 中的 zError 函数调用影响性能

c# - SevenZipSharp - 如何使用 C# 将多个目录压缩到一个文件中?

c# - 一种使用独特压缩形式解压缩文本文件的更快方法

用于流式压缩算法的 C++ 快速位数组类

c++ - 为什么 std::count 和 std::find 没有优化为使用 memchr?

c++ - 如何从多个 IP 数据包重建 TCP 流?

language-agnostic - 缩小测试用例

.net - Windows 服务 "self hosted"WCF : compression?