本文适用于了解spring框架,同时想在spring项目中使用Protocol Buffers(以下简称PB)的读者。
本文标题为《spring 项目中集成 Protocol Buffers 示例》,意思当然是教读者如何将PB配置到spring项目中去,但事实上在spring项目中使用PB无需任何配置,命该题目的用意也是让正在苦苦寻找配置方式的朋友在此止步,因为当初我也是这样。
什么是PB?以下为PB官网的描述。
译为:PB是一种高效的且可扩展的结构化数据编码方案。Google将其用在内部的几乎所有的RPC协议和文件格式。
通俗的讲PB是一个不错的序列化和反序列化方案,其采用二进制编码方案,效率比xml、json高。将PB用在文件存储、网络传输都是不错的选择。为什么这么说?
比如我们需要在服务器与客户端之间传输一些结构化的数据(对象、结构体),我们怎么去序列化和反序列化呢?你可能想到了以下方案:
1.使用Java Serialization。但这是依赖于java语言的,客户端和服务器采用不同的语言实现时就不好办了,而且Java Serialization公认的有一些问题。
2.定义自己的格式,比如约定“第几个字节表示内容长度”、“第几个字节表示数据类型”、“某某符号表示分隔符”等等,很明显这只能适用于一些数据格式很简单的场合。
3.使用xml或者json。首先xml的臃肿是大家都诟病的。另外xml和json的树形结构使用起来也是比较繁琐的,肯定是不及类使用起来简单。不过他们还是有一个PB不具备的优点,那就是数据的自描述性。如果这一点是你看重的,那么xml和json还是可以成为被选择的理由。
说了这么多,到底PB怎么用呢?下面我将以在springMVC项目中使用PB为示例介绍其基本用法。其实PB不依赖于任何平台或框架,原则上只要语言支持就可以,目前支持Java、C++、Python。
一、下载
去【PB官网】下载编译器。
去【maven中央库】搜索并下载PB的jar包。
二、定义.proto文件
约定数据格式,然后用PB的语法将其定义为.proto文件。这里使用官网的例子。
package tutorial;
//这里声明输出的java的包名
option java_package = "com.example.tutorial";
//这里声明输出的java的类名
option java_outer_classname = "AddressBookProtos";
message Person {
required string name = 1;
required int32 id = 2;
opti