flatbuffers 中的引用究竟是如何工作的?

How exactly do references in flatbuffers work?

根据 Google FlatBuffers 的“编写模式”指南,可以使用引用共享数据:“请记住,您可以共享数据(在缓冲区中引用相同的 string/table ), 因此将重复数据分解到它自己的数据结构中可能是值得的。"

但是,我不太明白这是如何实现的。我有一个平面缓冲区,我正在尝试对其进行逆向工程,我发现有多个偏移量指向相同的字符串值。当我再次编译解码后的 JSON 文件时,该字符串多次出现。我必须在模式文件中具体指定什么来防止这种情况发生?

谢谢:)

JSON 无法表示此类引用,因此当输出为 JSON 时,缓冲区被“扁平化”为树。只有在二进制级别,FlatBuffer 才能表示 DAG。您可以通过在序列化时在父对象中使用两次子偏移量来构造这样的 DAG。