protobuf-java - Protocol Buffer 3 : What happens when all fields of an object happen to be set to default value

标签 protobuf-java protocol-buffers protobuf-3

我对 proto3 的理解是,对于标量,无法区分消息发送者是否将字段设置为默认值或根本没有设置该字段,因为默认值不是通过线路发送的。也就是说,无论是否设置了默认值,该字段的 hasField 调用都将返回 false。仅当字段设置为默认值以外的值时,hasField 才会返回 true。

我已经阅读了一些有关使用对象作为包装器来解决这种情况的内容,但仍在尝试了解它是如何工作的,例如:https://github.com/protocolbuffers/protobuf/blob/master/src/google/protobuf/wrappers.proto

我的问题是:如果一个对象的所有字段碰巧都设置为其默认值,该对象是否仍会通过网络发送?或者该对象的 hasFields 会返回 False 吗?

最佳答案

零字节序列化在 protobuf 中完全有效。如果因为所有字段都是默认字段而无需序列化任何内容:您将获得零字节。

关于protobuf-java - Protocol Buffer 3 : What happens when all fields of an object happen to be set to default value,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53768390/

相关文章:

serialization - protobuf数据的存储格式是什么?

java - protobuf 生成的 java 文件出现编译错误 - 如何编译?

java - 需要一些关于如何解码从 HERE-OLP 以二进制格式下载的 protobuf 文件的建议

java - Protocol Buffer : raw binary data to json

java - 如何在 protobuf 消息中对 Java 原始 int[] 数组进行建模

java - 在java中使用TextFormat将protobuf消息转换为字符串时如何控制字段的顺序?

java - 如何从java maven项目生成python protobuf

java - 带有注解的 Protocol Buffer Java 实现,例如 ProtoBuf-net

Protocol Buffer 中的多态性 3

python-3.x - Protobuf 和 Python : How to add messages to "repeatable Any" field?