如何在python flatbuffer中构建字符串向量?

问题描述 投票:0回答:1

[似乎扁平缓冲区的python documentation(也this)目前不完整,有时与c ++ api混在一起。我尝试通过以下方式创建字符串向量:

builder, builder2, builder3 = flatbuffers.Builder(1024), flatbuffers.Builder(1024), flatbuffers.Builder(1024)
Feature.FeatureStart(builder)
Feature.FeatureStartStringValuesVector(builder2, 1)
builder2.PrependSOffsetTRelative(builder3.CreateString('a'.encode()))
Feature.AddStringValues(builder, builder2.EndVector(1))
Feature.FeatureEnd(builder)

在具有PrependSOffsetTRelative的行上,我得到一个错误:

flatbuffers.builder.OffsetArithmeticError:flatbuffers:偏移算术错误。

[我尝试用builder2替换builder3,或用builder替换builder2 / builder3,或删除.encode(),它们都导致各种错误。

我检查了CreateString是否总是返回8,而PrependSOffsetTRelative似乎只希望将0作为输入。我在这里想念什么?谢谢。

这是我的fbs模式文件:

table Feature {
  string_values:[string];
}
root_type Feature;
flatbuffers
1个回答
0
投票

确定。我想到了。不应有多个构建器,而是整个底部缓冲区直接按字节顺序从下到上依次构建整个平面缓冲区,所有构建器均使用相同的构建器。因此,调用Start,End等方法的顺序非常重要。以下作品:

builder = flatbuffers.Builder(1024)
s = builder.CreateString('a')
Feature.FeatureStartStringValuesVector(builder, 1)
builder.PrependSOffsetTRelative(s)
x = builder.EndVector(1)
Feature.FeatureStart(builder)
Feature.FeatureAddStringValues(builder, x)
ret = Feature.FeatureEnd(builder)
© www.soinside.com 2019 - 2024. All rights reserved.