Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/156.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C+;中读取并将大数据写入自定义二进制文件+; 我有一个C++代码,它将结构写入文件。结构的格式为: struct dataHeader { int headerID; int numberOfDataLines; }; struct data { double id; double type; char[100] name; char[100] yyy; };_C++_Serialization_Binaryfiles - Fatal编程技术网

在C+;中读取并将大数据写入自定义二进制文件+; 我有一个C++代码,它将结构写入文件。结构的格式为: struct dataHeader { int headerID; int numberOfDataLines; }; struct data { double id; double type; char[100] name; char[100] yyy; };

在C+;中读取并将大数据写入自定义二进制文件+; 我有一个C++代码,它将结构写入文件。结构的格式为: struct dataHeader { int headerID; int numberOfDataLines; }; struct data { double id; double type; char[100] name; char[100] yyy; };,c++,serialization,binaryfiles,C++,Serialization,Binaryfiles,现在,这两个结构总是成对编写的,一个文件包含50000对以上的结构 我的问题是有没有更有效的方法?文件大小是我最关心的问题 编辑: 当前代码是一个简单的循环写入(Psuedo代码): 谢谢。如果时间要求不是很高,您可以尝试压缩文件内容 如果数据有相似之处,您可以通过分组数据来减少数据存储需求。例如,您可以准备一个“name”或“yyy”值的列表,并分组写入数据,以便首先将数据值命名为“Bob”,然后命名为“Josh” 如果您的所有数据都是唯一的,那么留给您的唯一选择就是在写入文件之前压缩二进制数

现在,这两个结构总是成对编写的,一个文件包含50000对以上的结构

我的问题是有没有更有效的方法?文件大小是我最关心的问题

编辑: 当前代码是一个简单的循环写入(Psuedo代码):


谢谢。

如果时间要求不是很高,您可以尝试压缩文件内容


如果数据有相似之处,您可以通过分组数据来减少数据存储需求。例如,您可以准备一个“name”或“yyy”值的列表,并分组写入数据,以便首先将数据值命名为“Bob”,然后命名为“Josh”


如果您的所有数据都是唯一的,那么留给您的唯一选择就是在写入文件之前压缩二进制数据,并在读取后解压缩。我建议您使用压缩和解压缩速度非常快的代码。

您能展示一下您已经在使用的“低效”代码吗?如果不知道您已经在做什么,就很难提出更有效的方法…@user283288,使用压缩应该比重新组织代码更简单。既然你使用C++,你可能想直接使用C++压缩库代替ZLIB。如果我使用压缩库,读取和更新二进制文件时不会有开销吗?@ USER 28 228 38,压缩的开销肯定小于读取和写入更多数据到磁盘的开销!!!沙巴兹:目前,我只需跳过指向特定数据块的文件指针,就可以读取该数据块。据推测,这在使用压缩文件时是不可能的,而且还需要对整个文件进行解压缩?感谢您的回复,Semih。不幸的是,每个数据行都是唯一的条目。为了使用链接工具,我在答案的内部回答了您。希望它能工作
   while(dataBlock.Next())
   {
          fwrite(&_dataHeader, sizeof(dataHeader), 1, fpbinary); 

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