资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,Palmcity Confidential,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,Palmcity Confidential,*,Click to edit Master title style,Click to edit Master text styles,Second level,Third level,Fourth level,Fifth level,*,Protocol Buffer,的应用与原理,周华彬 研发三部,2011.12,定义,protocol buffers,是一个语言中立,平台中立,可扩展的序列化结构化数据的一种方式,可用于通讯协议,数据存储等方面。二进制,与,json,和,xml,是同一个层次的东东,支持的语言,Java,C+,Python,三种,Palmcity Confidential,Protocol buffer,的优劣,比,json,和,XML,1.,简单;,2.,小巧:,3-10,倍,3.,效率高:,20-100,倍,4.,跨语言,5.,有自动工具生成访问类,不足,1.,不适合描述符号文本,2.,不如,XML,易阅读和编辑,3.,需要工具预先生成序列化类,Palmcity Confidential,序列化反序列化对比测试,Palmcity Confidential,Protobuf,是较优化的,跨语言;可选,jackson,解析,json,效率高;,hessian,支持,rpc,Protocol buffer,使用,1.,下载资源,下载地址为:,http:/ buffer,编译器,后者包含了三种语言的开发包。首先解压,protoc-2.x.0-win32.zip,,把,protoc.exe,文件放到该目录中。编译生成的,protobuf-java-2.X.0.jar,复制到,proto_homeexamples,2.,使用,A.,使 用,protocol buffer,编译器编译,addressbook.proto,文件。打开命令行窗口,并定位到,proto_homeexamples,目录中,运行命令,protoc-java_out=.addressbook.proto,,执行这个命令后会在当前目录下生成一个,java,类,.,Palmcity Confidential,B.,编译,执行命令,javac-d.-classpath.;protobuf-java-2.x.0.jar AddPerson.java ListPeople.java comexampletutorialAddressBookProtos.java,C.,执行,运行,AddPerson,,在命令中执行命令,java-cp.;protobuf-java-2.X.0.jar AddPerson addr.dat,,按照提示输入相应的信息,将保存到,addr.dat,中,Palmcity Confidential,显示数据,执行命令,w:jdk6binjava-cp.;protobuf-java-2.3.0.j,ar ListPeople addr.dat,Palmcity Confidential,过程,1-proto,文件,proto,文件,定义程序中需要处理的结构化数据,在,protobuf,的术语中,结构化数据被称为,Message,。,proto,文件非常类似,java,或者,C,语言的数据定义。清单,1,显示了例子应用中的,proto,文件内容。,package lm;,message helloworld,required int32 id=1;/ID,required string str=2;/str,optional int32 opt=3;/optional field,Palmcity Confidential,编译成,-C+,protoc-I=.-cpp_out=.addressbook.proto,编译成,-JAVA,protoc-java_out=.addressbook.proto,编译成,-python,protoc-python_out=.addressbook.proto,Palmcity Confidential,C+,读取,linux,安装,protobuf,$unzip protobuf-2.3.0.zip,$cd protobuf-2.3.0,$./configure&make&make install,$vi/etc/profile,export LD_LIBRARY_PATH=/usr/local/lib:/lib:/usr/lib,export LD_RUN_PATH=$LD_LIBRARY_PATH,export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig,$protoc,I.,cpp_out./addressbook.proto,$make cpp,$./list_people_cpp addr.dat,Addr.dat,是,windows,下生成的数据文件,复制到,linux,后可直接读取。环境变量必须设置,否则编译会出错,Palmcity Confidential,原理之解析与串行化,每个,ProtocolBuffer,类有些方法用于读写消息的二进制数据,(http:/ Confidential,ProtocolBuffer,与面向对象设计,ProtocolBuffer,类只是用于存取数据的,类似于,C+,中的结构体,他们并没有在面向对象方面做很好的设计。如果你想要给这些类添加更多的行为,最好的方法是包装,(wrap),。包装同样适合于复用别人写好的,.proto,文件。这种情况下,你可以把,ProtocolBuffer,生成类包装的很适合于你的应用,并隐藏一些数据和方法,暴露有用的函数等等。,你不可以通过继承来给自动生成的类添加行为,。,这会破坏他们的内部工作机制,。,Palmcity Confidential,更新,proto,文件时的规则,在新的,proto,文件中就要遵守如下规则:,对已存在的任何字段,你都不能更改其标识(,tag,)号。,你绝对不能添加或删除任何,required,的字段。,你可以添加新的,optional,或,repeated,的字段,但是你必须使用新的标识(,tag,)号(例如,在这个,protocol buffer,中从未使用过的标识号,甚至于已经被删除过的字段使用过的标识号也不行)。,Palmcity Confidential,
展开阅读全文