当需要存储以 Java 实例形式(来自生成的 java 类)的 protobuf3 消息时,最好的选择是存储对象本身,然后再从数据库中读取它。
我的用例是将此类消息存储在 Mongodb 中。在调查这个的时候,我找不到办法,所以决定在这里问。
当需要存储以 Java 实例形式(来自生成的 java 类)的 protobuf3 消息时,最好的选择是存储对象本身,然后再从数据库中读取它。
我的用例是将此类消息存储在 Mongodb 中。在调查这个的时候,我找不到办法,所以决定在这里问。
您可以将 Protobufs Java 类转换为 JSON,从 JSON 转换为 an org.bson.Document
,然后编写文档并在读取时反转该转换。
有关详细信息,请参阅JsonFormat。
这是写端的一个简单示例:
YourProtobufsClass anInstance = YourProtobufsClass.getDefaultInstance();
String json = JsonFormat.printer().print(yourProtobufsClass);
Document document = Document.parse(json);
mongoClient.getDatabase(...).getCollection(...).insertOne(document);
这是读取端的一个简单示例:
JsonFormat.Parser parser = JsonFormat.parser();
FindIterable<Document> documents = collection.find(...);
for (Document document : documents) {
YourProtobufsClass.Builder builder = YourProtobufsClass.newBuilder();
parser.merge(document.toJson(), builder);
// now you can build an instance of your protobufs class which
// has been populated from the retrieved JSON
YourProtobufsClass anInstance = builder.build();
}