加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 放在二进制数据文件头文件中

发布时间:2020-12-16 05:55:21 所属栏目:百科 来源:网络整理
导读:我有一个模拟读取我们创建的大型二进制数据文件(10到100的GB).我们以速度为由使用二进制.这些文件是系统依赖的,从我们运行的每个系统上的文本文件转换,所以我不关心可移植性.目前这些文件是用fwrite编写的POD结构体的许多实例. 我需要更改结构体,所以我想添
我有一个模拟读取我们创建的大型二进制数据文件(10到100的GB).我们以速度为由使用二进制.这些文件是系统依赖的,从我们运行的每个系统上的文本文件转换,所以我不关心可移植性.目前这些文件是用fwrite编写的POD结构体的许多实例.

我需要更改结构体,所以我想添加一个文件版本号的头,随着结构的改变,它将被增加.由于我这样做,我想添加一些其他信息.我正在考虑结构体的大小,字节顺序,也可能是创建二进制文件的代码的svn版本号.还有什么其他有用的可以添加吗?

解决方法

根据我的经验,第二次猜测你需要的数据总是浪费时间.重要的是以可扩展的方式构建元数据.对于 XML文件,这是直截了当的,但二进制文件需要更多的思考.

我倾向于将元数据存储在文件结尾的结构中,而不是开始.这有两个优点:

>截断/未终止的文件是
容易检测.
>元数据页脚往往可以
附加到现有文件没有
影响他们的阅读代码.

我使用的最简单的元数据页脚看起来像这样:

struct MetadataFooter{
  char[40] creatorVersion;
  char[40] creatorApplication;
  .. or whatever
} 

struct FileFooter
{
  int64 metadataFooterSize;  // = sizeof(MetadataFooter)
  char[10] magicString;   // a unique identifier for the format: maybe "MYFILEFMT"
};

在原始数据之后,元数据页脚和THEN文件页脚都被写入.

当读取文件时,寻求endofof(FileFooter).阅读页脚,并验证magicString.然后,根据metadataFooterSize查找并读取元数据.根据文件中包含的页脚大小,可以为缺少的字段使用默认值.

正如KeithB指出的,您甚至可以使用这种技术将元数据作为XML字符串存储,从而提供完全可扩展的元数据的优点,具有二进制数据的紧凑性和速度.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读