天天看點

ProtoBuf 的java使用

碰巧用到Proto,算是筆記吧

windows :

1,兩個檔案:proto.exe,  protobuf-java-2.4.1.jar

2,建立一個工程TestPb,在下面建立一個proto檔案件,用來存放【。proto】檔案

3,将proto,exe放在工程下,

4,建立一個msg.proto檔案:

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;

}

5,生成 java檔案:在proto.exe目錄下:protoc  --java_out=./src   ./proto/msg.proto

6,copy個測試示例了

建立一個檔案TestPb.java

***********************************************************

package com.protobuftest.protobuf;

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 TestPb {

public static void main(String[] args) {

// TODO Auto-generated method stub

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

builder.setEmail("[email protected]");

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);

}

}

***********************************************

*******************************

生成java檔案:PersonProbuf.java

*******************************

工程檔案結構:

ProtoBuf 的java使用