我正在尝试使用Google的Protocol Buffers进行扩展。我有一个“主”原型文件和其他几个“扩展”主要文件的原型文件。
在我的java代码中,我不是100%确定如何正确添加重复消息。当我运行我编写的java代码时,toString()方法显示添加了扩展属性,但它没有正确解码(可能是因为我对添加的Collar对象运行了build()调用)。
如何正确地将重复元素添加到原型文件中的扩展项?
File1.proto
package protocol_buffer;
option java_outer_classname = "PetClass";
message Pet {
optional string pet_name = 1;
extensions 100 to 199;
}
File2.proto
import "File1.proto";
option java_outer_classname = "CollarClass";
message Collars {
optional string collar_type = 1;
optional string collar_color = 2;
}
extend pet {
repeated Collars collar = 100;
}
MyFile.java
Pet pet = Pet.newBuilder()
.setPetName("Fido")
.addExtension(CollarClass.collar,
Collar.newBuilder()
.setCollarType("round")
.setCollarColor("brown")
.build()
)
.build();
System.out.println(pet.toString());
答案 0 :(得分:2)
我发现了我的问题。我正确地将扩展名添加到“Pet”。解析protobuf字节数组时,需要添加扩展注册表,以便函数知道要解析的扩展名。
ExtensionRegistry registry = ExtensionRegistry.newInstance();
registry.add(CollarClass.collar);
Pet pet = Pet.parseFrom(new FileInputStream(<some file>),registry);