gpt4 book ai didi

java - protobuf 序列化错误

转载 作者:IT老高 更新时间:2023-10-28 20:59:45 31 4
gpt4 key购买 nike

我正在尝试使用 protobuf 序列化结构。经过数小时试图找出我做错了什么后,我决定测试谷歌的示例,但效果不佳

我有以下来自 google 的协议(protocol) (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[] serialized = john.toByteArray();

我得到“java.lang.UnsupportedOperationException:这应该被子类覆盖。”

谢谢;

最佳答案

正如 Marc 所说,Protocol Buffer 版本不匹配会给你这个确切的信息。特别是如果

  • 使用 2.4.3(或更早版本)的 protoc.exe 将 .proto 定义转换为 java
  • 您使用 2.5.0 protobuffers 库

您将在 GeneratedMessage 类的许多方法(例如 getParserForType、getUnknownFields)中收到此消息。毫无疑问,其他潜在的不匹配会导致此错误


使用 protocol buffers 2.5.0必不可少重新生成所有具有 2.5.0 版本的 protoc(或在 Windows 上)的 java 类protoc.exe)。


如果您使用 protocol buffers version 2.4 的库执行反向操作,则运行由 protoc version 2.5 生成的代码。您将收到以下消息

java.lang.VerifyError: class xxx.xxx.xx.. 
overrides final method getUnknownFields.()Lcom/google/protobuf/UnknownFieldSet;

关于java - protobuf 序列化错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15908268/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com