我是否应该对成员表调用 finish

should I call finish on member tables

提问人:fluter 提问时间:10/31/2023 更新时间:10/31/2023 访问量:34

问:

所以我有表作为其他表的成员,当我创建父表的数据时,我只需要调用父表,还是同时需要同时调用成员表和父表?代码如下:finishfinish

table Child {
    ...
}

table Parent {
    c: Child;
    ...
}

FlatBufferBuilder fbb = new FlatBufferBuilder(1024);
int child = Child.createChild(fbb, ...);
fbb.finish(child); // <-- Do I need to call this?

int parent = Parent.createParent(fbb, child, ...);
Parent.finishParentBuffer(fbb, parent); // <-- finishes the whole buffer for writing
// write(fbb.dataBuffer());

问题是我是否需要在子表上调用 finish?

Java 序列化 flatbuffers

评论


答:

1赞 Moop 10/31/2023 #1

在构建父表或任何其他表之前,必须完成每个表。Finishing 为您提供偏移值,然后将该值提供给其他表进行存储。

使用这些方法会自动为您完成。create<TABLE_NAME>()

您的示例代码是错误的,如下所示:

int child_offset = Child.createChild(fbb, ...);
int parent_offset = Parent.createParent(fbb, child_offset, ...);

如果使用该方法,则必须手动调用 。看一下生成的代码Child.startChild()Child.endChild()Child.createChild()

评论

0赞 fluter 10/31/2023
所以你的意思是我必须同时调用和 ?但是你的代码调用了 niether。finish(child)finish(parent)
0赞 Moop 11/1/2023
不,看看 和 里面的代码,它显式地调用你。createChildcreateParentfbb.finish