gpt4 book ai didi

java - 如何在一个 protobuf 文件中写入多条消息?

转载 作者:行者123 更新时间:2023-11-30 07:07:32 24 4
gpt4 key购买 nike

以google的教程为例:

message Person {
required string name = 1;
required int32 id = 2;
optional string email = 3;

enum PhoneType {
MOBILE = 0;
HOME = 1;
WORK = 2;
}

message PhoneNumber {
required string number = 1;
optional PhoneType type = 2 [default = HOME];
}

repeated PhoneNumber phone = 4;
}

message AddressBook {
repeated Person person = 1;
}

它使用 AddressBook 包装消息来存储多个 Person 消息。如果我对其进行序列化或反序列化,我会使用像 AddressBook.mergeFrom(FileInputStream) addressBook.build.().writeTo()

这样的方法

但是如果我有2000万条Person记录,显然会溢出。谷歌还说,如果我想在一个文件中存储多条消息而不使用包装消息,我需要记录每条消息的长度,这对于字符串类型是不可能的。

有没有什么好的方法可以序列化一个文件中的大量消息?顺便说一句,我正在使用 Java。

最佳答案

我还没有试过这个,但我希望它能工作:

写作:

CodedOutputStream output = CodedOutputStream.newInstance(...);

while (...) {
Person person = ...;
output.writeMessageNoTag(person);
}

阅读:

CodedInputStream input = CodedInputStream.newInstance(...);
while (!input.isAtEnd()) {
Person.Builder builder = Person.newBuilder();
input.readMessage(builder, null); // Or specify extension registry
Person person = builder.build();
// Use person
}

关于java - 如何在一个 protobuf 文件中写入多条消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24872625/

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