Google Protocol Buffers安装

试用Google Protocol Buffers

试用了google Protocol Buffers, 2.0.0 beta 版本,感觉还不错。
可以去这里下载,有linux和windows版本。
Protocol Buffers是一个平台中立,编程语言无关的,可扩展的机制,用来将数据序列化。有点类似xml,但是比xml更小更快更简单。

[!toc]

如何使用

1. 使用Protocol特定的简洁的描述语法,描述一个数据结构,如:

message Person {
required string name = 1;
required int32 id = 2;
optional string email = 3;
enum PhoneType {
MOBILE = 0;
HOME = 1;
WORK = 2;
}
message PhoneNumber {
required string number = 1;
optional PhoneType type = 2 [default = HOME];
}
repeated PhoneNumber phone = 4;
}

具体这个文件的语法请参考Protocol Buffer Language Guide

2. 定义后这个文件之后,保存为文件phone.proto。然后使用protocol buffer提供的命令行工具protoc,从这个文件生成制定编程语言的代码,现在支持Java, C++, 和Python。

如生成java代码的命令如下:

protoc -I=$SRC_DIR --java_out=$DST_DIR phone.proto

3. 得到生成java类,就可以进行对上面定义的结构化数据进行操作了。比如,数据结构person中的所有变量,都提供get和set方法。并且提供has方法,检查这个变量是否存在。

可以对数据进行序列化,保存到磁盘上。也可以使用Builder方法,从磁盘文件中将原有数据读出。但是序列化到磁盘中的数据是部分二进制的,不能被人直接读取。这个不如xml方便。感觉有点像IDL,或者是多语言版的JIBX,或者是单机版的openoffice的UNO。其他PB确实像很多东西,这个页面列举了一些。

应用场景

一直不是很清楚的知道这个应用场景。

也许是一些用户,要制定一个特定的数据结构,进行数据交互和共享。那么使用这个PB Language 定义一个数据结构,然后大家从这个描述文件,各自生成自己使用的编程语言对应的代码文件,再使用这些代码对硬盘中的数据进行读写。那么,只要都遵守这个数据文件格式,硬盘中的数据共享就实现了夸平台跨语言了。如果数据描述文件做了修改,只要遵守一定的规则,那么原有数据还是可以兼容使用的。这个就是做了一个平台无关的文件与平台和语言相关的数据对象之间的适配转化工作,就和很多xml解析器一样,只是这个也许更简单更易用吧。

优点

1. 定于语言体积小,支持多种数据类型,如list,支持嵌套

2. 定义过程中可以使用类型的概念,可以在使用的时候检查类型合法性

3. 可以将一个描述文件,生成多种语言的代码,使数据的读写实现了语言无关。

4. 如果描述文件修改了,只要遵守一定的规则,那原有数据结构对应的数据,也是可以被成功读取的。

缺点

1. 序列化后的文件不可读。

2. 不可与xml或者json进行相互转化

问题

在使用中发现2个问题

1. 不能加载库

在ubuntu下安装,使用如下命令

./configure

make check

make install

安装之后,运行protoc,提示找不到两个库:libprotobuf.so,libprotoc.so。原因是因为这两个库安装在了/usr /local/lib下,但是ubunut的lib路径为/usr/lib。这个可能是我事先没有制定-lib目录。不过anyway,

解决方法:

cd /usr/lib/

sudo ln -s  /usr/local/lib/libprotobuf.so.0.0.0 libprotobuf.so.0

sudo ln -s  /usr/local/lib/libprotoc.so.0.0.0 libprotoc.so.0

2. 不能正常编译给出的sample例子(java版本)。

首先进入$protobuf-2.0.0beta/java目录,运行mvn package,在protobuf-2.0.0beta/java/target目录下,得到protobuf-java-2.0.0beta.jar 文件,这个文件应该放在classpath中,以便在使用protoc生成的java类。但是在sample中,并没有去将这个jar文件加如 classpath中,需要手动加入。否则,运行make java,提示很多类找不到。

解决方法:

方法1.将protobuf-java-2.0.0beta.jar拷贝到系统的classpath下

方法2.将protobuf-java-2.0.0beta.jar中的类完整路径内容解压缩到$protobuf-2.0.0beta/examples中。

转载自:http://www.blogjava.net/daning/archive/2008/07/08/213318.html#

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值