java - 更改 Protocol Buffer 中字段的数据类型

标签 java protocol-buffers

您好,为了保持向后兼容性,可以更改 Protocol Buffer 中字段的数据类型吗?例如

旧消息:

message Connection{
       optional string wifi = 1;
       optional int32 wifiCode = 2;
}

新消息:

message Connection{
     message wifiConnection{
         optional string name = 1;
         optional int32 code = 2;
     }

     optional wifiConnection wifi = 1;
}

所以基本上我没有更改字段的标签号也没有重命名它,但我更改了数据类型。那么这会向后兼容吗?如果获取使用先前模式创建的旧原型(prototype)对象,可以通过这个新模式创建的对象来解析它吗?

最佳答案

不,它不会向后兼容。 Protocol Buffer 存储数据大致如下

Code1 + wire-type1 + {Data1}
Code2 + wire-type2 + {Data2}
Code3 + wire-type3 + {Data3}

因此第一个旧格式的存储方式如下

1 + wire-type {Wifi-Data}
2 + wire-type {Wifi-Code-Data}

新消息的存储方式如下

1 + wire-type { 
               1 + wire-type {Wifi-Data}
               2 + wire-type {Wifi-Code-Data}
}    

关于java - 更改 Protocol Buffer 中字段的数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27362742/

相关文章:

java - 遍历整数树集并将 next() 中的值存储到整数变量

java - 在 Java 8 中是否有一种简洁的方法来迭代带有索引的流?

java - 初学者 : Number Guessing Game

types - 是否可以为 Protocol Buffer 中的字段定义数字范围?

Google 在 Golang 中的 Protocol Buffer

go - Protobuf、Go 和私有(private)字段

java - 如何进行计算机组装模拟

java - 隐藏正在进行的通知

regex - Protobuf3 : String validation with regex

ajax - 如何使用 Protocol Buffer 序列化 Go 结构并在 Dart over Ajax 中使用它们