Протокол буфера поддерживает множественное определение классов.Вы делаете это путем объявления всех типов классов, которые есть в вашем файле Protocol Format .
В этом примере мы объявляем два разных класса и их свойства:
syntax = "proto2";
package tutorial;
message Person {
required string name = 1;
required int32 id = 2;
optional string email = 3;
}
message House {
repeated string owner = 1;
}
Если вы хотите использовать буфер протокола в качестве стандартных протоколов связи, я думаю, вы хотите отправить один из классов.См. Официальные документы, где они объясняют, как справиться с этой ситуацией, в этой публикации .
Еще один хороший пример - создание уникального сообщения (Wrapper), которое содержит общие свойства и один из классов.:
message WrapperMessage {
required int64 timestmap = 1;
oneof data {
Person person = 2;
House house = 3;
}
}
Затем, прежде чем декодировать класс, вы можете проверить, какой тип класса содержит обертка, вызвав HasField
.
Примечание. Протоколные буферы 3 реализуют новую функцию для этой цели на основена имущество FileDescriptorSet
и Any
.