首页 >Java >Java中常见字段的Protobuf部分序列化

Java中常见字段的Protobuf部分序列化

WBOY
WBOY转载
2024-02-12 15:45:061212浏览

问题内容

我有一条 protobuf 消息,需要发送给多个客户端。该消息对于每个客户端具有相同的数据,除了一个字段(序列号)对于每个客户端来说是不同的。现在,我可以更改生成的 Java 消息对象中的字段,并分别为每个客户端序列化消息。但是有没有一种方法可以序列化除一个字段之外的所有内容,然后仅为每个客户端序列化该字段(例如,交换序列化消息中的相应字节或其他内容)?

编辑:我见过 mergeFrom 方法来合并两个消息,但根据我的理解,它首先解析消息,然后交换数据,然后您可以再次序列化它,所以根本不是性能优化(?)。

解决方法

首先,我想非常确定这实际上与性能相关。如果协议缓冲区消息不大(如果它们不是多个千字节,我什至不会考虑这一点),那么我预计这对性能的影响基本上为零,并且您甚至不应该尝试优化它.

假设您已将其视为瓶颈,那么这并不难。连接序列化原型构造合并形式,所以大概这就是

myMessage.toBuilder().clearSpecialField().build().writeTo(outputStream);
MyMessage.newBuilder().setSpecialField(...).build().writeTo(outputStream);

(如果您已将 special_field 作为必填字段(违反最佳实践),那么您可能需要改用 buildPartial。)

然后你将其作为一条原始消息读取

MyMessage.parseFrom(inputStream);

以上是Java中常见字段的Protobuf部分序列化的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文转载于:stackoverflow.com。如有侵权,请联系admin@php.cn删除