gpt4 book ai didi

java - 将子字段添加到 DescriptorProto.Builder Protocol Buffers

转载 作者:太空宇宙 更新时间:2023-11-04 10:59:56 27 4
gpt4 key购买 nike

我最近开始使用protobufs,发现以下困难。你能帮我一下吗?

示例代码:

DescriptorProto.Builder builder;
FieldDescriptorProto.Builder fieldBuilder = FieldDescriptorProto.newBuilder()
.setLabel(label)
.setType(type)
.setName("name")
.setNumber(1)
.setDefaultValue("value");
builder.addField(fieldBuilder.build());

现在让字段的类型为FieldDescriptorProto.Type.TYPE_MESSAGE。我必须将子字段添加到使用 fieldBuilder 构建的字段中。

这应该是可能的,因为当我为原始文件构建描述 rune 件时,其根消息具有带字段的嵌套消息。当我调试时,我发现“消息类型的字段及其内部字段被添加到根消息中”,即,对于以下消息,它表示为 rootMessage 有一个字段 subMessage(type = Message) 和两个子字段 B、C。

示例原型(prototype):

message rootMessage{
string A = 1;
message subMessage{
string B = 1;
string C = 2;
}
subMessage sub = 2;
}

通常我需要类似的东西

FieldDescriptorProto.Builder fieldBuilder = FieldDescriptorProto.newBuilder()
.setLabel(label)
.setType(type)
.setName("name")
.addField(...) // **This Part**
.setNumber(1)
.setDefaultValue("value");

最佳答案

protobuf 使用的想法是向父级添加一个嵌套消息和一个字段,并通过在字段中添加 setTypeName 来链接它们,并使用字段 typeName 中给定的名称添加嵌套消息

DescriptorProto.Builder builder;
FieldDescriptorProto.Builder fieldBuilder =FieldDescriptorProto.newBuilder()
.setLabel(label)
.setType(type)
.setName("name")
.setTypeName("nestedMessageName")
.setNumber(1)
.setDefaultValue("value");
builder.addField(fieldBuilder.build());
builder.addNestedMessage(messageBuilder.setName("nestedMessageName").build());

关于java - 将子字段添加到 DescriptorProto.Builder Protocol Buffers,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47008824/

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