我有一条 protobuf 消息,需要发送给多个客户端。该消息对于每个客户端具有相同的数据,除了一个字段(序列号)对于每个客户端来说是不同的。现在,我可以更改生成的 Java 消息对象中的字段,并分别为每个客户端序列化消息。但是有没有一种方法可以序列化除一个字段之外的所有内容,然后仅为每个客户端序列化该字段(例如,交换序列化消息中的相应字节或其他内容)?
编辑:我见过 mergeFrom 方法来合并两个消息,但根据我的理解,它首先解析消息,然后交换数据,然后您可以再次序列化它,所以根本不是性能优化(?)。
首先,我想非常确定这实际上与性能相关。如果协议缓冲区消息不大(如果它们不是多个千字节,我什至不会考虑这一点),那么我预计这对性能的影响基本上为零,并且您甚至不应该尝试优化它.
假设您已将其视为瓶颈,那么这并不难。连接序列化原型构造合并形式,所以大概这就是
myMessage.toBuilder().clearSpecialField().build().writeTo(outputStream); MyMessage.newBuilder().setSpecialField(...).build().writeTo(outputStream);
(如果您已将 special_field
作为必填字段(违反最佳实践),那么您可能需要改用 buildPartial
。)
然后你将其作为一条原始消息读取
MyMessage.parseFrom(inputStream);
以上是Java中常见字段的Protobuf部分序列化的详细内容。更多信息请关注PHP中文网其他相关文章!