你如何布置自定义二进制文件格式?

时间:2011-10-02 21:02:51

标签: c++ serialization layout

每个应用程序都有自己的自定义二进制文件格式(例如.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

2 个答案:

答案 0 :(得分:7)

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

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

从那篇文章开始;如果您已经拥有需要设计的格式,它可能有助于明确您的想法。

答案 1 :(得分:1)

简而言之 - 如果您只需要序列化,这意味着您将从流中读取和写入流,那么您可以在此处轻松使用并按成员发出您的scructs成员,或者使用任何序列化库。 ,从CArchive to ....无论你看到什么花哨。

如果没有,您将需要直接访问文件中的数据,然后......您将使用您的要求,他们将通过一些技巧告诉您文件的布局是什么具有

是的,要广泛讨论这里的话题。例如,

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

  • 顺序写入(拇指将附加到数据库的末尾)
  • 拇指将按升序附加
  • 直接阅读(给定时间,获取o(1)中的缩略图)
  • 以后不对数据库进行修改
  • 缩略图将在15秒内完成

是的,要求在这里很简单,但它们代表了它们。

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

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