为什么块的长度在块之后

why is the length of block after the block

我正在从二进制文件中提取数据,看到二进制数据块的长度在块本身之后(块中的字符块的长度在前,然后是 00,然后是信息)

这个区块的目的是什么?是否用于错误检查?

几个例子:

  1. 写入操作开始时块的长度未知。考虑来自麦克风的音频流,我们想将其写为单个块。将它缓存在 RAM 中是不可行的,因为它可能很大。这就是为什么在我们收到 EOF 后,我们将块的有效大小附加到文件中。 (另一种方法是在块的开头为长度字段保留几个字节,然后在 EOF 之后在那里写入长度。但这需要更多的 IO。)
  2. 数据库WALs(预写日志)可以使用这样的方案。考虑用户开始交易并进行大量更改。每个更改都作为单个记录(块)附加到 WAL。如果用户决定回滚事务,现在很容易倒退,然后砍掉所有作为用户想要回滚的事务的一部分添加的记录。
  3. 二进制文件通常携带两块元信息:一块在开头(例如创建日期、主机名),另一块在末尾(例如统计信息和校验和)。当应用程序打开现有的二进制文件时,它首先要加载这两个块来决定内存分配等。如果最后一个块的长度存储在文件的末尾而不是从头扫描文件,那么加载最后一个块要容易得多。