protocol buffer

简介:
protocol buffer 是 google 的一种数据交换的格式,它独立于语言,独立于平台。google 提供了三种语言的实现:java、c++ 和 python,每一种实现都包含了相应语言的编译器以及库文件。由于它是一种二进制的格式,比使用 xml 进行数据交换快许多。可以把它用于分布式应用之间的数据通信或者异构环境下的数据交换。本文通过一个简单的示例介绍 protocol buffer。

在开始之前需要下载 protocol buffer 的编译器和相应类库。下载地址为: http://code.google.com/p/protobuf/downloads/list 。当前版本为 2.3.0,下载一下两个压缩包:protoc-2.3.0-win32.zip 和 protobuf-2.3.0.zip,前者是 protocol buffer 编译器,后者包含了三种语言的开发包。

首先解压 protoc-2.3.0-win32.zip,把 protoc.exe 文件放到 path 路径中,最简单的就是把这个文件复制到 c:\windows 目录中。

解压 protobuf-2.3.0.zip 文件,假设解压后的目录为 proto_home。由于此开发包中只包含了源文件,没有包含打包后的 jar 文件,所以需要自己手动编译。下面一步一步来编译 protocol buffer 的 java 实现,由于 protocol buffer 使用 maven 作为编译工具,所以必须先下载安装 maven,maven 可以从 http://maven.apache.org 上下载。安装 maven 非常简单,只要解压并把 bin 目录添加到 path 中即可。安装好 maven 后,测试一下 maven 是否安装成功,打开命令行窗口,运行命令 mvn -version,当看到一下输出后,说明 maven 安装成功。
 
 
在编译之前还需把 protocol buffer 的编译器复制一份到把 protocol buffer 的编译器复制一份到目录 proto_home\src\ 中,由于在 maven 脚本中调用了这个文件。下面在命令行窗口中把当前工作目录定位到proto_home\java 中,运行命令 mvn package。编译完成后会在 taget 目录中生成一个 jar 文件 protobuf-java-2.3.0.jar。

protocol buffer 的编译器和基于 java 的类库已经准备好了,下面可以使用 protocol buffer 写一个简单的示例。本文中就直接使用 protocol buffer 本身自带的一些示例,这个示例在 proto_home\examples 目录中。这个示例会用到这个目录中的 addressbook.proto、AddPerson.java 和 ListPerson.java 文件。下面一步一步来运行这些示例。

首先把前面编译生成的 protobuf-java-2.3.0.jar 复制到 proto_home\examples 目录中,便于引用。

使用 protocol buffer 编译器编译 addressbook.proto 文件。打开命令行窗口,并定位到 proto_home\examples 目录中,运行命令  protoc --java_out=. addressbook.proto,执行这个命令后会在当前目录下生成一个java类 com.example.tutorial.AddressBookProtos.java。

生成了 java 类之后就是编译并运行这个示例,在命令行中执行命令  javac -d . -classpath .;protobuf-java-2.3.0.jar AddPerson.java ListPeople.java com\example\tutorial\AddressBookProtos.java。

下面运行 AddPerson,在命令中执行命令  java -cp .;protobuf-java-2.3.0.jar AddPerson addr.dat,按照提示输入相应的信息,如下图所示
 
 
运行这个程序会在当前目录中创建一个数据文件 addr.dat 保存 protocol buffer 生成的数据。运行程序 ListPeople 则可以读取 addr.dat 文件中的数据。
java -cp .;protobuf-java-2.3.0.jar ListPeople addr.dat
如下图所示
 


本文转自chainli 51CTO博客,原文链接:http://blog.51cto.com/lichen/284015,如需转载请自行联系原作者
相关文章
|
2月前
|
存储 编译器 C++
从Proto到C++:探索Protocol Buffers的强大转换机制
从Proto到C++:探索Protocol Buffers的强大转换机制
262 4
|
7月前
|
存储 编译器 Go
Protocol Buffers [protobuf]
Protocol Buffers [protobuf]
33 0
|
7月前
|
运维 网络协议 Linux
聊聊 IP packet 的 TTL 与 tcp segment 的 MSL
聊聊 IP packet 的 TTL 与 tcp segment 的 MSL
|
9月前
|
开发工具 git
解决 HTTP/2 stream 1 was not closed cleanly before end of the underlying stream
解决 HTTP/2 stream 1 was not closed cleanly before end of the underlying stream
839 0
|
存储 JSON Java
Google Protocol Buffer
Google Protocol Buffer
122 0
|
XML Dart Java
Protocol Buffers
protobuf它是Google提供的一个技术, 一个类库, 也可以说是一套规范, 学java的人都知道java有自己的序列化机制, 对不同的java程序来说,他们可以使用同一种序列化机制进行数据的传递, 但是java的序列化机制并不适用于其他的语言比如python
207 0
|
网络协议
OGG-01232 Receive TCP params error: TCP/IP error 104 (Connection reset by peer), endpoint:
源端: 2015-02-05 17:45:49 INFO OGG-01815 Virtual Memory Facilities for: COM anon alloc: mmap(MAP_ANON) anon free: munmap file alloc: mmap(MAP_SH...
3056 0
|
存储 数据格式
Protocol Buffers 简介
本文档的 Protocol Buffer 的中文文档使用的是 Asciidoctor 进行编排的 http://docs.ossez.com/protocol-buffers-docs/index.html(本 WIKI 中的内容将会与在线发布的版本同步) Google Protocol Buffer( 简称 Protobuf) 是 Google 公司内部的混合语言数据标准,目前已经正在使用的有超过 48,162 种报文格式定义和超过 12,183 个 .proto 文件。
1638 0