期待されるメッセージクラスを使用しないたび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は列挙型です。
結果が。になるはずのコードを実行するErrorMessageと、aに解析され、LoginMessage両方の列挙型:errorfieldとstatusfieldが混同されます。
では、これら2つのタイプのメッセージをどのように区別できますか?
最適化に構造型を使用しているようですので、フィールド名やメッセージタイプは送信しませんが、この問題を解決する実際的な方法は何でしょうか。ErrorMessageにを挿入したくないのでLoginMessage、常にを返しますLoginMessage。
errorフィールドインデックスを他のメッセージが使用しない数値に設定することを考えましたErrorMessage error = 15000;が、これが正しいかどうか、また常に機能するかどうかはわかりません(のすべてのフィールドLoginMessageがオプションであるとしたら、機能するでしょうか?) 。