flatbuffers 中 header 的用途是什么?

What is the purpose of the header in flatbuffers?

我一直在努力理解 wire-format,据我所知,前 4 个字节只是将(偏移量)编码为 root-type。虽然我似乎理解这一点,但我无法理解这种间接的动机。为什么不只是 root_type 存储在字节 0-4?

这是到根 table 的偏移量。它是必需的,因为根 table 前面通常是可变大小 + 对齐的 vtable(参见 https://google.github.io/flatbuffers/flatbuffers_internals.html)所以即使理论上我们可以用 v[=16= 启动缓冲区] 并从中计算根 table 的开始,简单地存储一个偏移量到它更简单和更一致。

关于格式的其他小细节在事后看来并不完全是最佳的,但序列化格式的重要之处在于它永远 forwards/backwards 兼容,所以它们现在不会改变 :)