每个文件都以位、位、位...的形式写成。
此外,每个文件都有两种类型的元数据:
- 操作系统元数据:文件位置、所有者、权限等,这些信息都写在操作系统本身中(例如:在 Linux 的 inode 中)
- 非操作系统元数据:版权信息、色彩深度、图像分辨率、快门速度等,这些信息写在文件本身中。
我的问题是,在整个文件的“位序列”中,实际文件数据和写入文件的元数据的相对位置是什么?在“位序列”中,元数据先出现还是实际文件内容先出现?
被告知:如果答案很大程度上取决于文件类型,那么请选择 .mp3 文件类型。
答案1
每个文件都以位、位、位...的形式写成。
在大多数操作系统中,文件字节操作系统级别的序列——即,它们只能作为 8 位单元寻址,而不能作为单独的位寻址。
某些文件格式可能会指定将字节重新解释为位流(或更常见的是位流“数据包”的集合),但这不是一般情况。
在“位序列”中,元数据是否先出现,还是实际文件内容先出现?
它非常取决于文件类型:这实际上是文件类型的一个重要部分定义。
一些文件格式指定将元数据放在开头,其他文件格式则放在结尾,还有一些文件格式使用结构化格式(例如 RIFF 或 PNG 块),其中元数据块可以位于任何位置,只要用特定标识符标记即可。
MP3 文件使用 ID3v2 标签格式 – 元数据块的位置和布局在 ID3 中定义v2.3.0或者v2.4.0规范。(例如,后一个链接中的第 5 节说标签应该在開始處。)
然而,许多 MP3 文件还在文件末尾(最后 256 个字节)包含一个 ID3v1 标签块,有些甚至可能只有 ID3v1 而没有 ID3v2。实际上,MP3 文件格式最初没有首先对嵌入元数据有任何规定,我认为 ID3v2 标签仍然以这样一种方式构建,即它们假装是无法播放的音频帧(为了兼容性)。
PNG 文件使用标记块关键元数据所在的结构“IDAT”及其他具有特定标签的块 – 不管它们在文件中的偏移量如何。(唯一的限制是它们必须位于实际“数据”块之前。)
JPEG 文件也使用标记段,它们将元数据保存在Exif格式,即...嵌入在 JPEG 段中的整个 TIFF 文件,因此您必须解释三层格式 - 首先是 JPEG,然后是 TIFF,最后是 Exif。也可以看看。再次强调,片段的位置可能会有所不同——它通过其类型标签来识别为包含元数据。
PE/COFF 文件(Windows .exe)是混合文件:它们在开头附近有一个固定的偏移量,但它只保存一个指针到真正的 PE 头,因此实际标题偏移量可能因文件而异。该标头在固定偏移量处有一些元数据,然后有一个部分只要具有特定的部分名称,列表就可以在任意位置保存更多元数据。
Microsoft Office (.docx/.xlsx) 和 OpenDocument (.odt/.ods) 文件实际上是 Zip 档案,因此它们在末尾具有 Zip 级元数据(“目录”),并且实际的文档元数据存储在该 Zip 档案中的特定“文件”中 - 因此您必须解释 Zip 文件目录才能找到 Office 元数据。
某些文件类型没有嵌入元数据。例如,文本 (.txt) 文件只包含任意文本。