当前位置:  开发笔记 > 编程语言 > 正文

什么放在二进制数据文件的标题中

如何解决《什么放在二进制数据文件的标题中》经验,为你挑选了2个好方法。

我有一个模拟读取我们创建的大型二进制数据文件(10到100的GB).出于速度原因,我们使用二进制 这些文件是系统相关的,从我们运行的每个系统上的文本文件转换而来,所以我不关心可移植性.这些文件当前是POD结构的许多实例,用fwrite编写.

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



1> Roddy..:

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

我倾向于将元数据存储在文件END的结构中,而不是开头.这有两个好处:

可以轻松检测到截断/未终止的文件.

元数据页脚通常可以附加到现有文件而不会影响其读取代码.

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

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"
};

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

在读取文件时,请搜索end-sizeof(FileFooter).阅读页脚,并验证magicString.然后,根据metadataFooterSize回顾并读取元数据.根据文件中包含的页脚大小,您可以使用缺少字段的默认值.

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


这是一个我没有尝试过的有趣方法.您甚至可以将MetadataFooter设置为XML字符串,并获得二进制数据文件的所有好处,并且仍然具有用于存储元数据的易于扩展的方案.

2> High Perform..:

对于大型二进制文件,我会认真对待HDF5(Google for it).即使它不是您想要采用的东西,它也可能指出您在设计自己的格式时有一些有用的方向.

推荐阅读
云聪京初瑞子_617
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有