Запись и чтение повторяющихся расширенных полей в Protobuf - PullRequest
1 голос
/ 21 марта 2012

Я пытаюсь использовать расширения с буфером протокола Google. У меня есть один «основной» файл прото и несколько других файлов «прото», которые «расширяют» основной файл.

В моем Java-коде я не уверен на 100%, как правильно добавить повторяющееся сообщение. Когда я запускаю написанный мной код Java, метод toString () показывает, что атрибуты расширения добавлены, но не декодируются должным образом (возможно, потому что я выполнил вызов build () для добавленного объекта Collar).

Как правильно добавить повторяющиеся элементы в расширенные элементы в файле прото?

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 Ответ

2 голосов
/ 21 марта 2012

Я разобрался в своей проблеме. Я правильно добавлял расширение в «Pet». При разборе байтового массива protobuf необходимо добавить реестр расширений, чтобы функция знала, какие расширения анализировать.

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

Pet pet = Pet.parseFrom(new FileInputStream(<some file>),registry);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...