google protobuf入门(序列化和反序列化)

ProtoBuf,全称是Protocol Buffers, 它是谷歌内部用的一种高效的、可扩展的对结构化数据进行编码的格式规范。谷歌自己内部很多程序之间的通信协议都用了ProtoBuf。

下面介绍的是使用Java ProtoBuf的基本步骤:代码链接

1.http://code.google.com/p/protobuf/downloads/list ,选择其中的win版本下载

2.下载一个protobuf-java-2.4.1.jar文件(注意,要与你刚才下的proto.exe版本相同,否则可能出现编译通不过现象)

http://grepcode.com/snapshot/repo1.maven.org/maven2/com.google.protobuf/protobuf-java/2.4.1

3.在proto.exe同级目录,编写一个msg.proto文件:

package tutorial; 

 

option java_package = "com.protobuftest.protobuf";   //生成的类的包名
<pre name="code" class="plain">
option java_outer_classname = "PersonProbuf"; //生成类的类名
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; message CountryInfo { required string name = 1; required string code = 2; optional int32 number = 3; }} message AddressBook { repeated Person person = 1; }
 


4.使用如下命令编译这个文件:

C++
protoc.exe --proto_path=E:\原来f盘\学习\protobuf --cpp_out=E:\原来f盘\学习\protobuf E:\原来f盘\学习\protobuf/msg.proto 
java
protoc.exe --java_out=./ msg.proto


5.将生成的ProtoBufferPractice.java文件引入eclipse

6.把下载的protobuf-java-2.4.1.jar也引入工程

7.使用方法:

package com.protobuftest.protobuf.test;

import java.util.List;

import com.google.protobuf.InvalidProtocolBufferException;
import com.protobuftest.protobuf.PersonProbuf;
import com.protobuftest.protobuf.PersonProbuf.Person;
import com.protobuftest.protobuf.PersonProbuf.Person.PhoneNumber;

public class ProtoBufTest {

	/**

	 * @param args

	 */

	public static void main(String[] args) {

	// TODO Auto-generated method stub

	PersonProbuf.Person.Builder builder = PersonProbuf.Person.newBuilder();

	builder.setEmail("kkk@email.com");

	builder.setId(1);

	builder.setName("TestName");

	builder.addPhone(PersonProbuf.Person.PhoneNumber.newBuilder().setNumber("131111111").setType(PersonProbuf.Person.PhoneType.MOBILE));

	builder.addPhone(PersonProbuf.Person.PhoneNumber.newBuilder().setNumber("011111").setType(PersonProbuf.Person.PhoneType.HOME));

	 

	Person person = builder.build();

	byte[] buf = person.toByteArray();

	 

	try {

	Person person2 = PersonProbuf.Person.parseFrom(buf);

	System.out.println(person2.getName() + ", " + person2.getEmail());

	List<PhoneNumber> lstPhones = person2.getPhoneList();

	for (PhoneNumber phoneNumber : lstPhones) {

	System.out.println(phoneNumber.getNumber());

	}

	} catch (InvalidProtocolBufferException e) {

	// TODO Auto-generated catch block

	e.printStackTrace();

	}

	 

	System.out.println(buf);

	 

	}
}

protobuf工作流程图




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值