在Protobuf中编写和读取重复的扩展字段

时间:2012-03-20 22:33:11

标签: java protocol-buffers

我正在尝试使用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());

1 个答案:

答案 0 :(得分:2)

我发现了我的问题。我正确地将扩展名添加到“Pet”。解析protobuf字节数组时,需要添加扩展注册表,以便函数知道要解析的扩展名。

ExtensionRegistry registry = ExtensionRegistry.newInstance();
registry.add(CollarClass.collar);

Pet pet = Pet.parseFrom(new FileInputStream(<some file>),registry);