Решение Джона верное и работает, но довольно странно (для меня).Но Protocol Buffers довольно прост, поэтому вы можете сделать что-то вроде этого:
enum Type {
FOO = 0;
BAR = 1;
}
message Foo {
required Type type = 1;
}
message Bar {
required Type type = 1;
required string text = 2;
}
По сути, панель сообщений расширяет сообщение Foo (с практической стороны, конечно).Реализация в Java также проста:
Bar bar = Bar.newBuilder().setType(Type.BAR).setText("example").build();
byte[] data = bar.toByteArray();
----
Foo foo = Foo.parseFrom(data);
if(foo.getType() == Type.BAR){
Bar bar = Bar.parseFrom(data);
System.out.println(bar.getText());
}
Я знаю, это не элегантное решение, но оно простое и логичное.