protobuf序列化错误
我正在尝试使用protobuf序列化结构。经过许多小时试图弄清楚我在做什么错,我决定测试google的示例,但效果不佳
我从Google(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("jdoe@example.com")
.addPhone(
Person.PhoneNumber.newBuilder()
.setNumber("555-4321")
.setType(Person.PhoneType.HOME))
.build();
byte []序列化= john.toByteArray();
我得到“ java.lang.UnsupportedOperationException:应该被子类覆盖。”
谢谢;
回答:
正如Marc所说,协议缓冲区版本不匹配会给您确切的信息。特别是如果
- .proto定义使用2.4.3(或更早版本)的protoc.exe转换为Java。
- 您使用2.5.0 protobuffers库
您将通过
类的许多方法(例如getParserForType,getUnknownFields)获得此消息。毫无疑问,其他潜在的不匹配将导致此错误
随着 它是 ,你 所有Java类与2.5.0版本protoc的(或在Windows
protoc.exe)。
如果您使用 生成的反向运行代码。您将收到以下消息 *
java.lang.VerifyError: class xxx.xxx.xx.. overrides final method getUnknownFields.()Lcom/google/protobuf/UnknownFieldSet;
以上是 protobuf序列化错误 的全部内容, 来源链接: utcz.com/qa/398332.html