更改协议缓冲区中字段的数据类型

时间:2014-12-08 16:47:19

标签: java protocol-buffers

嗨是可以更改协议缓冲区中字段的数据类型,以保持向后兼容性。例如

旧消息

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

**new message**

message Connection{

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

     optional wifiConnection wifi = 1;
}

所以基本上我没有更改字段的标记号,也没有重命名它,但我已经更改了数据类型。那么它会向后兼容吗?如果获取使用先前模式创建的旧proto对象,是否可以通过此新模式创建的对象进行解析?

1 个答案:

答案 0 :(得分:1)

不,它不会向后兼容。 Protcol Buffers存储的数据大致类似于

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}
}