我以为每次我不使用预期的消息类InvalidProtocolBufferException
时都会得到一个尝试。parseFrom(bytes)
我的代码如下所示:
try {
LoginMessage msg = LoginMessage.parseFrom(bytes);
// ... use msg ...
} catch(InvalidProtocolBufferException exception) {
ErrorMessage error = ErrorMessage.parseFrom(bytes);
// ... do something ...
}
我的信息是:
message LoginMessage
{
required Status status = 1;
optional UserMessage user= 2;
}
message ErrorMessage
{
required Error error = 1;
}
哪里TeamStatus
和Error
是Enums。
当我执行应该导致 a 的代码时ErrorMessage
,它会解析为 aLoginMessage
并混淆两个枚举:error
字段与status
字段。
那么我怎么能区分这两种类型的消息呢?
似乎它使用结构类型进行优化,因此它不传输字段名称或消息类型,但是解决这个问题的实际方法是什么?我不想在中插入ErrorMessage
并LoginMessage
总是返回 a LoginMessage
。
我考虑将error
字段索引设置为其他消息不会使用的数字,例如ErrorMessage error = 15000;
,但我不知道这是否正确,也不知道它是否总是有效(想象一下,如果所有字段LoginMessage
都是可选的,它会起作用吗?) .