如何布局自定义二进制文件格式

How do you lay out your custom binary file format?

本文关键字:自定义 二进制文件 格式 布局 何布局      更新时间:2023-10-16

每个应用程序都有自己自定义的二进制文件格式(例如。mpq,。wad)。最重要的是,它通常是压缩的。

所以,我的问题是,如何巧妙地/巧妙地布局文件的二进制内容。你在开头是否有一个类似"目录"的结构?将所有内容转储到一个文件中是不是更好?

假设你有一个Shapes的数组,并且在每个Shape中都是变形的顶点数据(所以顶点数据已经从最初加载的文件中改变了,所以它应该重新保存)。

class Shape
{
    vector<Vertex> verts ;
} ;
class Sphere : public Shape { } ; // ...more geometric shapes (Tet, Cube) are defined..
class Model : public Shape { } ; // general model "Shape" loaded from file
vector<Shape*> shapes ; // save me!  contents are mix of Model, Sphere, Tet..
// each with variable number of verts

我最喜欢文章的主题文件格式是http://www.fadden.com/techmisc/file-formats.htm。

除此之外,它可能归结为您存储的数据类型,以及如何使用这些数据(主要是通过网络传输吗?寻求访问权有多重要?等).

从那篇文章开始;如果你已经有一个需要设计的格式,它可能会帮助你明确你的想法。

简而言之—如果您只需要序列化,这意味着您将从流中读写,那么您可以在这里使用简单的方法并逐个成员地发出您的脚本,或者使用任何序列化库,从CArchive to ....只要你喜欢。

如果没有,您将需要直接访问文件中的数据,那么…你将使用你的需求,他们会用一些技巧告诉你文件的布局。

是的,这是一个广泛的话题。例如

我需要一个数据库的缩略图为我的软件。每个缩略图都有一个时间戳,我知道它们的大小不同。要求:

  • 顺序写入(拇指将被附加到数据库的末尾)
  • 拇指按升序添加
  • 直接读取(给定时间,在0(1)中获取缩略图)
  • 不修改数据库
  • 缩略图将在15秒间隔

是的,这里的需求很简单,但它们代表了它们自己。

我创建了两个文件,一个是索引文件,另一个是图片文件。

存储:在数据文件后附加图像,在索引文件后附加数据文件中图像的索引。读取:使用简单索引(索引为(timestamp-timestamp_start)/15)查找文件中的索引。使用该索引获取图像数据