【发布时间】:2018-08-19 14:52:01
【问题描述】:
我正在将一个 java 应用程序从协议缓冲区 2 迁移到协议缓冲区 3。
在 proto 2 中检查是否设置了一个字段,你有 hasfield() 方法
为其生成的示例 Java 代码是:
public boolean hasText() {
return ((bitField0_ & 0x00000004) == 0x00000004);
}
但是在 proto 3 中它已被删除。 如何检查 proto 3 中是否设置了字段?
【问题讨论】:
-
AFAIK,在默认的 proto3 实现中根本没有跟踪。字段要么为零(未发送),要么为非零(已发送),就是这样。
-
是的,proto3 搞砸了他们的优化,即没有序列化具有默认值的标量。现在,读者无法区分“未指定字段”和“指定字段但具有默认值”。您可以通过将标量包装在 oneof 或子消息中来收回此功能,并伴随着以您的首选语言引起的笨拙。
标签: java protocol-buffers proto3