转载:
http://blog.sina.com.cn/s/blog_52ff416e0101hv71.html
Protocol buffers和mxl一样在序列化数据结构时很灵活、高效和智能,但是它的优势在于定义文件更小,读取速度更快,使用更加简单。目前protocol buffers支持C++、java和python三种语言并且独立于平台。
----------------linux环境安装----------------------
tar-xvf
./configure--prefix=/usr/local/protobuf-2.5.0
make
makeinstall
安装成功后可将编译程序链接到系统bin目录下,以免每次使用都加绝对路径
ln-s
linux安装完成!
使用步骤:
新建*.proto文件,并调用命令:protoc --cpp_out= *.proto编译即可生成C++的.h和cpp文件。
------------------windows环境安装------------------------
解压后使用VS打开vsprojects目录下的工程,编译生成protoc.exe、libprotobuf.lib,将protoc.exe放到windows目录下。
新建测试工程,链接libprotobuf.lib文件。新建test.proto文件,并在cmd控制台下输入命令即可生成头文件和源文件:
C:\Users\Administrator> protoc.exe-I=e:\protocbuf\include --cpp_out=e:\protocbuf\include\e:\protocbuf\include\test.proto
protocbuf语法
定义示例
option optimize_for = SPEED;
enum UserType
{
}
message UserList
{
}
message User
{
}
protocbuf 使用message表示数据结构,类似c语言中的struct。
优化级别介绍
ProtocolBuffer定义三种优化级别SPEED/CODE_SIZE/LITE_RUNTIME。缺省情况下是SPEED。
编译介绍
protoc--proto_path=IMPORT_PATH--cpp_out=DST_DIR --java_out=DST_DIR --python_out=DST_DIRpath/to/file.prot
升级原则
1. 不要修改已经存在字段的标签号。
2. 任何新添加的字段必须是optional和repeated限定符,否则无法保证新老程序在互相传递消息时的消息兼容性。
3.在原有的消息中,不能移除已经存在的required字段,optional和repeated类型的字段可以被移除,但是他们之前使用的标签号必须被保留,不能被新的字段重用。
4.int32、uint32、int64、uint64和bool等类型之间是兼容的,sint32和sint64是兼容的,string和bytes是兼容的,fixed32和sfixed32,以及fixed64和sfixed64之间是兼容的,这意味着如果想修改原有字段的类型时,为了保证兼容性,只能将其修改为与其原有类型兼容的类型,否则就将打破新老消息格式的兼容性。
5. optional和repeated限定符也是相互兼容的