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

回到顶部