Protobufを使用して構造をシリアル化しようとしています。私が間違っていることを理解しようと何時間も試みた後、私はグーグルの例をテストすることに決めました、そしてそれはうまくいきませんでした
私はグーグルから次のプロトコルを持っています( https://developers.google.com/protocol-buffers/docs/javatutorial ):
package tutorial;
option Java_package = "com.example.tutorial";
option Java_outer_classname = "AddressBookProtos";
message Person {
required string name = 1;
required int32 id = 2;
optional string email = 3;
repeated PhoneNumber phone = 4;
enum PhoneType {
MOBILE = 0;
HOME = 1;
WORK = 2;
}
message PhoneNumber {
required string number = 1;
optional PhoneType type = 2 [default = HOME];
}
}
message AddressBook {
repeated Person person = 1;
}
そして私はそれを次のようにシリアル化しようとしています:
Person john = Person.newBuilder()
.setId(1234)
.setName("John Doe")
.setEmail("[email protected]")
.addPhone(
Person.PhoneNumber.newBuilder()
.setNumber("555-4321")
.setType(Person.PhoneType.HOME))
.build();
byte [] serialized = john.toByteArray();
「Java.lang.UnsupportedOperationException:これはサブクラスによってオーバーライドされることになっています」というメッセージが表示されます。
ありがとう;
マークが言ったように、プロトコルバッファバージョンの不一致はあなたにこの正確なメッセージを与えるでしょう。特に
このメッセージは、クラスGeneratedMessageの多くのメソッド(getParserForType、getUnknownFieldsなど)で表示されます。このエラーを引き起こす可能性のある他の不一致は間違いありません
プロトコルバッファ2.5.の場合必須あなた再生成すべてJava 2.5.0バージョンのクラスprotoc(またはWindows protoc.exe)の。
逆の場合プロトコルバージョン2.5によって生成されたコードをプロトコルバッファバージョン2.4のライブラリで実行します。次のメッセージが表示されます
Java.lang.VerifyError: class xxx.xxx.xx..
overrides final method getUnknownFields.()Lcom/google/protobuf/UnknownFieldSet;