c++ - 在 C++ 中将大数据读写到自定义二进制文件

标签 c++ serialization binaryfiles

我有一些 C++ 代码可以将结构写入文件。结构的格式是:

     struct dataHeader
     {
      int headerID;
      int numberOfDataLines;
      };

     struct data
     {
       double id;
       double type;
       char[100] name;
       char[100] yyy;
      };

现在,这两个结构总是成对编写,一个文件包含超过 50000 个这样的结构对。

我的问题是有没有办法更有效地做到这一点?文件大小是我最关心的问题。

编辑: 当前代码是循环中的简单 fwrite(伪代码):

   while(dataBlock.Next())
   {
          fwrite(&_dataHeader, sizeof(dataHeader), 1, fpbinary); 

          while( dataLine.Next())
          {
            fwrite(&_data[i], sizeof(data), 1, fpbinary); 
          }  
   }

谢谢。

最佳答案

如果数据具有相似性,您可以通过对数据进行分组来降低数据存储要求。例如,您可以准备一个“name”或“yyy”值的列表,并将您的数据分组写入,这样首先是名称为“Bob”的数据值,然后是“Josh”。

如果您的所有数据都是唯一的,那么留给您的唯一选择是在写入文件之前压缩二进制数据,并在读取文件后解压缩。我建议你使用 QuickLZ这对于压缩和解压缩来说非常快。

关于c++ - 在 C++ 中将大数据读写到自定义二进制文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21755314/

相关文章:

c - 应该将任何 C 文件作为二进制文件打开

c++ - 为什么我要读文件中的最后一个字两次?

Java Doubles 不擅长数学

c++ - 如何访问 QHeaderView::sectionsInserted 插槽

c++ - 如何在开放源IDE(codelite)中迁移到C++ 11

java - 反序列化对象列表

android - 序列化包含 ArrayLists 的 ArrayList?

c# - 升级到 Microsoft.WindowsAzure.Storage 4.0.0 后表实体未正确序列化

c# - 保存大量外汇金融报价数据的最佳方式

c++ - 二进制文件写入后读取负整数