Java 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"; 

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM