gpt4 book ai didi

java - Flatbuffers:如何构建嵌套表?

转载 作者:行者123 更新时间:2023-11-30 07:55:32 25 4
gpt4 key购买 nike

我有一个 3 层嵌套的 Java POJO,在模式文件中看起来像这样:

struct FPathSegment {
originIata:ushort;
destinationIata:ushort;
}

table FPathConnection {
segments:[FPathSegment];
}

table FPath {
connections:[FPathConnection];
}

当我尝试将 Java POJO 序列化为等效的 Flatbuffer 时,每次我尝试使用通用的 FlatBufferBuilder 构建整个对象图时,我几乎都会收到“不允许嵌套序列化”错误。

文档中没有任何线索说明我是否对整个图形只有一个构建器?每个表/结构一个单独的?如果分开,如何将子对象导入父对象?

有所有这些方法,例如创建/启动/添加各种 vector ,但没有解释其中的构建器。非常复杂。

这是我的 Java 代码,我在其中尝试将 Java POJO 序列化为等效的 Flatbuffers:

private FPath convert(Path path) {
FlatBufferBuilder bld = new FlatBufferBuilder(1024);

// build the Flatbuffer object
FPath.startFPath(bld);
FPath.startConnectionsVector(bld, path.getConnections().size());

for(Path.PathConnection connection : path.getConnections()) {

FPathConnection.startFPathConnection(bld);

for(Path.PathSegment segment : connection.getSegments()) {
FPathSegment.createFPathSegment(bld,
stringCache.getPointer(segment.getOriginIata()),
stringCache.getPointer(segment.getDestinationIata()));
}

FPathConnection.endFPathConnection(bld);
}

FPath.endFPath(bld);
return FPath.getRootAsFPath(bld.dataBuffer());
}

每个 start() 方法都会抛出一个“FlatBuffers:对象序列化不能嵌套”的异常,不知道该怎么做。

最佳答案

您使用单个 FlatBufferBuilder,但您必须在启动父级之前完成子级的序列化。

在您的情况下,这需要您将 FPath.startFPath 移动到末尾,并将 FPath.startConnectionsVector 移动到之前。这意味着您需要将每个 FPathConnection 的偏移量存储在一个临时数组中。

这将使嵌套错误消失。

造成这种不便的原因是允许序列化过程在没有任何临时数据结构的情况下继续进行。

关于java - Flatbuffers:如何构建嵌套表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43150040/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com