gpt4 book ai didi

java - 如何在 protobuf 中定义循环?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:36:32 33 4
gpt4 key购买 nike

假设我有以下 mode.proto 文件:

message EntityD {
optional EntityE ePointer = 1;
optional int32 dField = 2;
}

message EntityE {
optional EntityD dPointer = 1;
optional int32 eField = 2;
}

这有 2 个实体 - D 和 E,它们允许交叉链接。我的问题是,从上面的 *.proto 生成 Java 代码后,我无法创建循环:

public static void main(String[] args) throws Exception {
Model.EntityD.Builder dBuilder = Model.EntityD.newBuilder();
Model.EntityE.Builder eBuilder = Model.EntityE.newBuilder();

dBuilder.setDField(42);
eBuilder.setEField(7);
dBuilder.setEPointer(eBuilder);
eBuilder.setDPointer(dBuilder);

Model.EntityD d = dBuilder.build();
Model.EntityE e = eBuilder.build();

System.err.println("same d: "+(d==e.getDPointer()));
System.err.println("same e: "+(e==d.getEPointer()));
}

我正在尝试创建一个简单的 D <--> E 循环。相反,我得到这个:

same d: false 
same e: false

enter image description here

创建的模型中一个循环,但仅从一定深度开始。

这是 probuf 生成的 java 代码的问题吗?protobuf 是否正式支持图中的循环?其他 protobuf“输出”语言的预期结果是什么? (即c++)

最佳答案

protobuf 格式不包括对象身份,也没有引用/图形支持的概念。它只是一棵基本树。超出此范围的任何内容都是特定于实现的,而不是规范的一部分。

基本上,不要那样做。

这并不少见:许多序列化程序也是如此,包括 XML 和 json 序列化程序。同样,对于这些情况,某些实现可能支持身份的本地定义 - 但在一般情况下不能保证。

关于java - 如何在 protobuf 中定义循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23978234/

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