Java protobuf框架使用向?qū)?/h1>
ProtoBuf,全稱是Protocol Buffers, 它是谷歌內(nèi)部用的一種高效的、可擴(kuò)展的對結(jié)構(gòu)化數(shù)據(jù)進(jìn)行編碼的格式規(guī)范。谷歌自己內(nèi)部很多程序之間的通信協(xié)議都用了ProtoBuf。
下面介紹的是使用Java ProtoBuf的基本步驟:
1.http://code.google.com/p/protobuf/downloads/list ,選擇其中的win版本下載
2.下載一個protobuf-java-2.4.1.jar文件(注意,要與你剛才下的proto.exe版本相同,否則可能出現(xiàn)編譯通不過現(xiàn)象)
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";
 - 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.使用如下命令編譯這個文件:
5.將生成的ProtoBufferPractice.java文件引入eclipse
6.把下載的protobuf-java-2.4.1.jar也引入工程
7.使用方法:
- package com.protobuftest;
 - 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;
 - import com.protobuftest.protobuf.PersonProbuf.Person.PhoneNumberOrBuilder;
 - import com.protobuftest.protobuf.PersonProbuf.Person.PhoneType;
 - 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);
 - }
 - }
 
源文檔 <http://blog.csdn.net/csharp25/article/details/6632127>
原文鏈接:http://www.cnblogs.com/brainy/archive/2012/05/11/2496581.html
【編輯推薦】















 
 
 


 
 
 
 