在二进制数据文件的标题中放置什么[英] What to put in a binary data file's header

本文是小编为大家收集整理的关于在二进制数据文件的标题中放置什么的处理方法,想解了在二进制数据文件的标题中放置什么的问题怎么解决?在二进制数据文件的标题中放置什么问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

我有一个模拟,该模拟读取我们创建的大型二进制数据文件(10至100 GB).出于速度原因,我们使用二进制.这些文件是系统依赖的,是根据我们运行的每个系统上的文本文件转换的,因此我不关心可移植性.这些文件当前是带有FWRITE的POD结构的许多实例.

我需要更改结构,因此我想添加一个带有文件版本号的标题,该标题将在struct更改时会增加.由于我这样做,我也想添加其他一些信息.我在考虑结构,字节顺序的大小,以及创建二进制文件的代码的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"
};

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

读取文件时,请寻求末端 - 尺寸(filefooter).阅读页脚,并验证魔术.然后,根据Metadatafootersize寻求返回并阅读元数据.根据文件中包含的页脚大小,您可以使用默认字段使用默认值.

AS keithb 指出,您甚至可以使用此技术将元数据存储为XML字符串,从而提供优势两者完全可扩展的元数据,具有二进制数据的紧凑性和速度.

其他推荐答案

对于大型二进制文件,我会认真对待HDF5(Google为此).即使您不想采用它,也可能会指向您设计自己的格式时的某些有用方向.

其他推荐答案

对于大型二进制文件,除了我倾向于记录的版本编号外,我的原因是,大型二进制文件更容易被截断和/或随着时间的推移或在转移期间损坏那些.我最近发现恐怖,Windows根本无法很好地处理它,因为我使用Explorer将几百个文件的大约2TB复制到附件的NAS设备,并在每个副本上发现2-3个文件损坏(并非完全完全复制).

本文地址:https://www.itbaoku.cn/post/359037.html