我对 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/