web-dev-qa-db-ja.com

プロトコルメッセージのグループ終了タグが予期されたタグと一致しませんでした

次のスタックトレースを取得し続け、それが何を意味するのかわかりません。

Caused by: com.google.protobuf.InvalidProtocolBufferException: Protocol message end-group tag did not match expected tag.
    at com.google.protobuf.InvalidProtocolBufferException.invalidEndTag(InvalidProtocolBufferException.Java:73)
    at com.google.protobuf.CodedInputStream.checkLastTagWas(CodedInputStream.Java:124)
    at com.google.protobuf.AbstractMessageLite$Builder.mergeFrom(AbstractMessageLite.Java:189)
    at com.google.protobuf.AbstractMessage$Builder.mergeFrom(AbstractMessage.Java:732)
    at com.google.protobuf.AbstractMessage$Builder.mergeFrom(AbstractMessage.Java:238)
    at com.google.protobuf.AbstractMessageLite$Builder.mergeFrom(AbstractMessageLite.Java:178)
    at com.google.protobuf.AbstractMessage$Builder.mergeFrom(AbstractMessage.Java:724)
  • 「プロトコルメッセージのグループ終了タグが予期されたタグと一致しませんでした。」とは何ですか。平均?
  • 「メッセージ終了グループタグ」とは何ですか?
  • これはどこかに文書化されていますか?
17
Mike Rylander

Protobufのグループは、開始/終了の数値ペアとして記述されます。これは、<foo></foo>を必要とする方法に似ていますが、形式が異なります。基本的に、代わりに</bar>が見つかったと不平を言っています(ただ、xmlは単なるメタファーです)。詳細は エンコード仕様 にありますが、長短は次のいずれかです。

  • データが本質的に破損している(エンコーダーの損傷による)、または
  • 読み取り中にデータが破損している、または
  • データは正常であり、あなたは欠陥のあるデコーダを与えました

私が推測しなければならなかった場合、データは転送中に破損しています- それはとても恐ろしいほど一般的であるためです

16
Marc Gravell