http://blog.163.com/jiang_tao_2010/blog/static/12112689020114305013458/ 不错的protobuf、、
protobuf的编码方式:
http://wangjunle23.blog.163.com/blog/static/1178381712012101573148764/
http://m.blog.csdn.net/blog/wanyanxgf/8819604
protobuf的瑕疵:
http://blog.chinaunix.net/uid-26922071-id-3723751.html
1, 你甚至可以在无需重新部署程序的情况下更新数据结构(向前兼容,向后兼容),比下面的代码漂亮多了。
![]()
if (version==3) {
...
}else if (version>4) {
if (version==5) {
...
}
...
}
View Code
2, 支持的字段操作符:required, optional, repeated
3, 同一个proto文件,可以被protobuf编译器编译成特定语言。
4, 修改字段的注意事项:
必须不可以改变已经存在的标签的数字。
必须不可以增加或删除必须(required)字段。
可以删除可选(optional)或重复(repeated)字段。
可以添加新的可选或重复字段,但是必须使用新的标签数字,必须是之前的字段所没有用过的。
注意:
1 需要注意的是新的可选消息不会在旧的消息中显示,所以你需要使用 has_ 严格的检查他们是否存在
2 或者在 .proto 文件中提供一个缺省值。如果没有缺省值,就会有一个类型相关的默认缺省值:对于字符串就是空字符串;对于布尔型则是false;对于数字类型默认为0。
3 其他:
如果你添加了新的重复字段,你的新代码不会告诉你这个字段为空(新代码)也不会,也不会(旧代码)包含 has_ 标志。
5, python:
assert not message.HasField("foo")
1 或者在 .proto 文件中提供一个缺省值
2 果没有缺省值,就会有一个类型相关的默认缺省值
3 对于字符串就是空字符串;对于布尔型则是false;对于数字类型默认为0。
4 同时要注意的是如果你添加了新的重复字段,你的新代码不会告诉你这个字段为空(新代码)也不会,也不会(旧代码)包含 has_ 标志。