为什么阻止

时间:2016-02-02 19:11:19

标签: binaryfiles

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

该街区的目的是什么?是用于错误检查吗?

1 个答案:

答案 0 :(得分:2)

几个例子:

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