【发布时间】:2020-06-25 15:33:18
【问题描述】:
我正在使用平面缓冲区来建模类似 AST 的数据结构。简化后,架构定义如下所示:
namespace schema;
union Statement {
SimpleStatement;
FunctionStatement;
}
table SimpleStatement {
text: string;
}
table FunctionStatement {
func: Function;
}
table Function {
text: string;
}
table Component {
body: [Statement];
}
table Program {
body: [Component];
}
root_type Program;
我想做的是将Components 序列化为字节数组并保持缓存。在序列化Program 时,我会将Components 反序列化回它们的flatbuffers 类并将它们添加到Program 构建器中。
仅此一项就可以很好地工作,但现在Functions 开始发挥作用。在构建Component 时,我真的无法访问构建其子Function 对象所需的数据。要构建Component 并对其进行缓存,我需要添加一个占位符,在将反序列化的Component 包含到Program 构建器之前,我将其替换为相应Function 的正确偏移量。但如果可能的话,我不知道该怎么做。
一种解决方法是真正保存一个(更像人类的)引用,如字符串或 int (ID),并构建一个映射以稍后查找对象。但这意味着额外的查找和大小的轻微增加。
【问题讨论】:
标签: java flatbuffers