`

Protocol Buffers 入门应用

阅读更多

    Protocol Buffers是Google开源的序列化库,具有平台无关,高性能,兼容性好等有点。它是一种轻便高效的结构化数据存储格式,可以用于结构化数据序列化/反序列化。由于Protocol Buffers具有以上的特点,所以它很适合做数据存储或RPC的数据交换格式,常用作通信协议、数据存储等领域的与语言无关、平台无关、可扩展的序列化结构数据格式。目前支持C++、Java、Python三种语言。在Google内部,几乎所有的RPC协议和文件格式都是采用Protocol Buffers。

Protocol Buffers优点:

    1、平台无关、语言无关

    2、高性能,解析速度是XML的很多倍

    3、体积小

    4、使用简单

    5、兼容性好

编写Protocol Buffers步骤:

    1、定义一个.proto格式的文件

    2、使用Google提供的Protocol Buffers编译器生成特定语言(Java、C++、Python)的代码文件

    3、使用Protocol Buffers提供的API来编写应用程序。

下面我们来一步一步安装Protocol buffers并创建Protocol buffers应用程序:

下载:

          https://developers.google.com/protocol-buffers/docs/downloads

          https://code.google.com/p/protobuf/downloads/list

源码:http://sourceforge.net/projects/protobuf/files/protobuf-2.6.0.zip/download

 编译后应用文件:http://sourceforge.net/projects/protobuf/files/protoc-2.6.0-win32.zip/download

 

API :https://developers.google.com/protocol-buffers/docs/reference/java/index

jar : http://mvnrepository.com/artifact/com.google.protobuf/protobuf-java/2.6.0

 

github : https://github.com/google/protobuf

 

利用eclipse创建一个工程protobuftest,并添加上面步骤下载的protobuf-java-2.6.0.jar的jar包

 

定义消息格式文件person.proto

  假设我们的文件路径为E:/workspace-indigo/protobuftest/ProtoTest/src/person.proto该文件描述了通讯录中某个人的基本信息,内容如下:

package pro;

option java_package="com.lvcy.pro";

option java_outer_classname="PersonProtos";

message Persion{

required string name=1;

required int32 id=2;

optional string email=3;

message PhoneNumber{

required string number=1;

optional int32 type=2;

}

required PhoneNumber phone=4;

 

}

 

使用Google提供的Protocol Buffers编译器生成java语言

 

  终端定位到项目的src目录下,如下所示:

 


 

 然后再刷新之前创建的项目我们就可以看见生成了一个com.lvcy.pro包,里面定义了一个PersonProtos类,项目结构如下所示:

 

 



 

 

 

使用protocol buffers提供的API编写应用程序

 

    该例子创建了一个Person实例,先将对象保存到文件test.txt中,之后从文件中输入再打印出来。

 

 

package com.lvcy.pro;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import com.lvcy.pro.PersonProtos.Persion;

public class Program {

	public static void main(String[] args) throws Exception{
		
		Persion persion=Persion.newBuilder().setName("Lvcy").setEmail("123456789@qq.com").setId(10)
				.setPhone(Persion.PhoneNumber.newBuilder().setNumber("12345678900").setType(1)).build();
		FileOutputStream fileOutputStream=new FileOutputStream("test.txt");
		persion.writeTo(fileOutputStream);
		FileInputStream inputStream=new FileInputStream("test.txt");
		Persion persion2=Persion.parseFrom(inputStream);
		System.out.println(persion2);
		
	}
}

 

输出:

name: "Lvcy"

id: 10

email: "123456789@qq.com"

phone {

  number: "12345678900"

  type: 1

 

}

 

 

参考:http://www.lvcy.net/?post=164

 

 

 

  • 大小: 23.4 KB
  • 大小: 9.3 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics