我正在使用FlatBuffers处理对象流,每次完成创建对象后都应调用FlatBufferBuilder::Clear
吗?我的代码是这样的:
FlatBufferBuild fbb;
while (true) {
Foo foo;
RecvFooFromNetwork(&foo);
FooObject = CreateFooObjectDirect(fbb, foo.x, foo.y, ...);
SaveToDisk(fbb.GetBufferPointer(), fbb.GetSize());
// <-- Should I call fbb.Clear() here?
}
我观察到,即使
fbb.GetSize()
的大小应该保持不变,Foo
还是每增加一次。那是正常的吗? 最佳答案
是的,您回答了自己的问题,您需要调用Clear()
(最有效)或在循环内移动fbb
的声明。完成缓冲区后,缓冲区将保留在构建器中。在调用Finish()
之后,可能会有一个断言来创建更多数据,或者在github上打开一个问题?