我正在使用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上打开一个问题?

10-08 08:20