15

我一直在阅读一些文件格式,我对它们非常感兴趣。我想知道创建格式的过程是什么。例如,.jpeg、.gif 或音频格式。你会使用什么编程语言(如果你使用编程语言的话)?

该网站警告我这个问题可能会被关闭,但这只是我追求知识的风险。:)

4

4 回答 4

31

创建格式的过程是什么。例如,.jpeg、.gif 或音频格式。

步骤 1. 确定文件中将包含哪些数据。

步骤 2. 设计如何在文件中表示该数据。

第 3 步。写下来,以便其他人能够理解。

而已。文件格式只是一个想法。准确地说,这是一个“协议”。而已。
每个人都同意将给定的信息放在给定的格式中。

你会使用什么编程语言(如果你使用编程语言的话)?

所有可以进行 I/O 的编程语言都可以有文件格式。有些对他们可以处理的文件格式有限制。有些语言不像其他语言那样处理低级字节。

但是“格式”不是“实现”。

格式是一个概念。实现是——嗯——一个实现。

于 2010-07-23T19:23:01.887 回答
15

您不需要编程语言来编写文件格式的规范,尽管文字处理器可能被证明是一种方便的工具。

基本上,您需要决定如何将文件信息存储为位序列。这可能是微不足道的,也可能是极其困难的。举个简单的例子,一种非常原始的位图图像格式可以从一个表示位图宽度的无符号 32 位整数开始,然后再用一个表示位图高度的整数。然后你可以决定简单地按顺序写出像素的颜色,从左到右和从上到下(第 1 行像素,第 2 行像素,...),使用每像素 24 位,在形式为 8 位红色 + 8 位绿色 + 8 位蓝色。例如,由交替的蓝色和红色像素组成的 8×8 位图将存储为

00000008000000080000FFFF00000000FFFF0000...

在一个不太简单的例子中,它实际上取决于您希望保存的数据。通常你会定义很多记录/结构,例如BITMAPINFOHEADER,并指定它们应该以什么顺序出现,它们应该如何嵌套,并且你可能需要编写很多索引和查找表。我自己写了很多文件格式,最近是用于保存AlgoSim的 ASD(AlgoSim 数据)文件格式结构。此类文件由许多记录(可能嵌套)、查找表、魔术词(指示结构开始、结构结束等)和自定义格式的字符串组成。通常简化文件格式的一个典型事情是记录包含有关其大小的数据,以及记录之后的自定义数据部分的大小(如果记录是某种标题,则以自定义格式在前面的数据,例如像素颜色或声音样本)。

如果您以前没有使用过文件格式,我建议您学习一种非常简单的格式,例如 Windows 3 位图格式,并编写自己的 BMP 编码器/解码器,即创建和读取 BMP 文件的程序(来自从头开始),并显示读取的 BMP 文件。那么你现在的基本思路。

于 2010-07-23T19:24:51.600 回答
5

从根本上说,文件的存在只是为了存储将来需要加载的信息,无论是由同一个程序还是由不同的程序加载。一个非常好的文件格式是这样设计的:

  1. 任何编程语言都可以用来读取或写入它。
  2. 可以快速有效地访问程序最有可能需要从文件中获取的信息。
  3. 该格式将来可以扩展和扩展,而不会破坏向后兼容性。
  4. 格式应适应使用文件的域中存在的任何特殊要求(例如错误恢复、压缩、编码等)
于 2010-07-23T19:25:27.717 回答
1

您肯定对研究Protocol BuffersThrift感兴趣。这些工具提供了一种现代的、有原则的设计向前和向后兼容的文件格式的方法。

于 2010-07-23T20:45:10.837 回答