我有一条 protobuf 消息,需要发送给多个客户端。该消息对于每个客户端具有相同的数据,除了一个字段(序列号)对于每个客户端来说是不同的。现在,我可以更改生成的 java 消息对象中的字段,并分别为每个客户端序列化消息。但是有没有一种方法可以序列化除一个字段之外的所有内容,然后仅为每个客户端序列化该字段(例如,交换序列化消息中的相应字节或其他内容)?
编辑:我见过 mergeFrom 方法来合并两个消息,但根据我的理解,它首先解析消息,然后交换数据,然后您可以再次序列化它,所以根本不是性能优化(?)。
首先,我想非常确定这实际上与性能相关。如果协议缓冲区消息不大(如果它们不是多个千字节,我什至不会考虑这一点),那么我预计这对性能的影响基本上为零,并且您甚至不应该尝试优化它.
假设您已将其视为瓶颈,那么这并不难。连接序列化原型构造合并形式,所以大概这就是
myMessage.toBuilder().clearSpecialField().build().writeTo(outputStream); MyMessage.newBuilder().setSpecialField(...).build().writeTo(outputStream);
(如果您已将 special_field 作为必填字段(违反最佳实践),那么您可能需要改用 buildPartial。)
立即学习“Java免费学习笔记(深入)”;
然后你将其作为一条原始消息读取
MyMessage.parseFrom(inputStream);
以上就是Java中常见字段的Protobuf部分序列化的详细内容,更多请关注php中文网其它相关文章!
java怎么学习?java怎么入门?java在哪学?java怎么学才快?不用担心,这里为大家提供了java速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号