我有一个客户端 - 服务器应用程序,其中服务器将 protobuf 格式的序列化对象传输到客户端,我想退休 required
field 。不幸的是,我无法同时更改客户端和服务器以使用新的 .proto
定义。
如果我换一个 required
字段为 optional
,但仅限于对消息进行序列化的代码(即反序列化代码没有重新构建,仍然认为是required
字段),是否可以继续发布可以反序列化的消息只要我为现在填充一个值- optional
field ?
(这样做似乎很好,至少对于我尝试过的一些琐碎案例(仅使用 Java),但我感兴趣的是它是否是一种普遍合理的方法,以及是否存在任何边缘案例等我应该担心)。
动机 : 我的目标是退休required
客户端-服务器应用程序中的字段,其中服务器发布由客户端反序列化的消息。我的预期方法是:
required
字段到 optional
在行李箱上。 最佳答案
根据encoding format documentation ,无论是否需要字段都不会在序列化字节流本身中进行编码。即 optional
或 required
在编码的序列化消息中没有区别 .
我已经在实践中确认了这一点,使用 Java 生成的代码,通过将序列化消息写入磁盘并比较输出 - 使用包含所有支持的原始类型以及代表其他类型的字段的消息。
关于protocol-buffers - 我可以停用必需的 protobuf 字段吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13675590/