提问人:fluter 提问时间:10/31/2023 更新时间:10/31/2023 访问量:34
我是否应该对成员表调用 finish
should I call finish on member tables
问:
所以我有表作为其他表的成员,当我创建父表的数据时,我只需要调用父表,还是同时需要同时调用成员表和父表?代码如下:finish
finish
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?
答:
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
不,看看 和 里面的代码,它显式地调用你。createChild
createParent
fbb.finish
评论