当前位置:文档之家› protocol buffer应用与原理

protocol buffer应用与原理


B.编译
执行命令 javac -d . -classpath .;protobuf-java-2.x.0.jar AddPerson.java ListPeople.java com\example\tutorial\AddressBookProtos.java
C.执行
运行 AddPerson,在命令中执行命令 java -cp .;protobuf-java2.X.0.jar AddPerson addr.dat,按照提示输入相应的信息,将保存到 addr.dat中
原理之解析与串行化
每个ProtocolBuffer类有些方法用于读写消息的二进制数据( )。 包括:
· ParseFromIstream(istream* input) :从给定的C++ istream解析消息。
· SerializeToOstream(ostream* output) :将消息写入到给定的C++ ostream中。
他们是成对使用的,提供二进制数据的串行化和解析。
ProtocolBuffer与面向对象设计
ProtocolBuffer类只是用于存取数据的,类似于C++中的结构体, 他们并没有在面向对象方面做很好的设计。如果你想要给这些类添 加更多的行为,最好的方法是包装(wrap)。包装同样适合于复用别 人写好的 .proto 文件。这种情况下,你可以把ProtocolBuffer生 成类包装的很适合于你的应用,并隐藏一些数据和方法,暴露有用 的函数等等。 你不可以通过继承来给自动生成的类添加行为。 这
不足 1.不适合描述符号文本 2. 不如XML易阅读和编辑 3.需要工具预先生成序列化类
序列化反序列化对比测试
Protobuf是较优化的,跨语言;可选jackson,解析json效率高; hessian支持rpc
Protocol buffer使用
1.下载资源
下载地址为:下载protoc-2.x.0-win32.zip 和 protobuf-2.x.0.zip,前 者是 protocol buffer 编译器,后者包含了三种语言的开发包。首先解 压 protoc-2.x.0-win32.zip,把 protoc.exe 文件放到该目录中。编 译生成的 protobuf-java-2.X.0.jar 复制到 proto_home\examples
定义
protocol buffers是一个语言中立,平台中立 ,可扩展的序列化结构化数据的一种方式,可 用于通讯协议,数据存储等方面。二进制
与json和xml是同一个层次的东东
支持的语言Java,C++,Python三种
Protocol buffer的优劣
比json和XML 1.简单; 2.小巧:3-10倍 3.效率高:20-100倍 4.跨语言 5.有自动工具生成访问类
编译成-JAVA
protoc --java_out=. addressbook.proto
编译成-pythonp源自otoc --python_out=. addressbook.proto
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后可直接读取。环境变量必须设置,否则编译会出错
会破坏他们的内部工作机制。
更新proto文件时的规则
在新的proto文件中就要遵守如下规则:
对已存在的任何字段,你都不能更改其标识(tag)号。 你绝对不能添加或删除任何required的字段。 你可以添加新的optional或repeated的字段,但是你必须使
用新的标识(tag)号(例如,在这个protocol buffer中从 未使用过的标识号——甚至于已经被删除过的字段使用过的标 识号也不行)。
package lm; message helloworld { required int32 id = 1; // ID required string str = 2; // str optional int32 opt = 3; //optional field }
编译成-C++
protoc -I=. --cpp_out=. addressbook.proto
显示数据
执行命令w:\jdk6\bin\java -cp .;protobuf-java-2.3.0.j ar ListPeople addr.dat
过程1-proto文件
proto 文件,定义程序中需要处理的结构化数据,在 protobuf 的术语中, 结构化数据被称为 Message。proto 文件非常类似 java 或者 C 语言 的数据定义。清单 1 显示了例子应用中的 proto 文件内容。
2.使用
A.使 用 protocol buffer 编译器编译 addressbook.proto 文件。打开 命令行窗口,并定位到 proto_home\examples 目录中,运行命令 protoc --java_out=. addressbook.proto,执行这个命令后会在当 前目录下生成一个java类.
相关主题