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