Java 如何使用protobuf

方法一:

首先下载2.4.1的安装包 http://code.google.com/p/protobuf/downloads/ 安装命令示例如下:

  1. tar -xzf protobuf-2.1.0.tar.gz  
  2. cd protobuf-2.1.0  
  3. ./configure --prefix=$INSTALL_DIR  
  4. make  
  5. make check  
  6. make install  
 tar -xzf protobuf-2.1.0.tar.gz 
 cd protobuf-2.1.0 
 ./configure --prefix=$INSTALL_DIR 
 make 
 make check 
 make install 

1)编写一个Protocol文件,保存为 addressbook.proto

  1. package tutorial; 
  2.  
  3. option java_package = "com.example.tutorial"
  4. option java_outer_classname = "AddressBookProtos"
  5.  
  6. message Person { 
  7.   required string name = 1
  8.   required int32 id = 2
  9.   optional string email = 3
  10.  
  11.   enum PhoneType { 
  12.     MOBILE = 0
  13.     HOME = 1
  14.     WORK = 2
  15.   } 
  16.  
  17.   message PhoneNumber { 
  18.     required string number = 1
  19.     optional PhoneType type = 2 [default = HOME]; 
  20.   } 
  21.  
  22.   repeated PhoneNumber phone = 4
  23.  
  24. message AddressBook { 
  25.   repeated Person person = 1
package tutorial;

option java_package = "com.example.tutorial";
option java_outer_classname = "AddressBookProtos";

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 AddressBook {
  repeated Person person = 1;
}


2)执行如下命令,$SRC_DIR为address.proto文件的目录,$DST_DIR为生成java文件的目录

protoc -I=$SRC_DIR --java_out=$DST_DIR $SRC_DIR/addressbook.proto

就可以生成可用的Java类文件了


3)Protocol Buffer的Maven配置

<dependency>

<groupId>com.google.protobuf</groupId>

<artifactId>protobuf-java</artifactId>

<version>2.4.1</version>

</dependency>


4)代码使用


Java代码构建Address对象:

AddressBookProtos.Person person = AddressBookProtos.Person.newBuilder().setId(2234).setName("Benson Peng").build();

AddressBookProtos.AddressBook address = AddressBookProtos.AddressBook.newBuilder().addPerson(person).build();



参考文献:

1)Google官方教程 http://code.google.com/intl/zh-CN/apis/protocolbuffers/docs/javatutorial.html

2)Google Protocol Buffer的原理和使用 http://www.ibm.com/developerworks/cn/linux/l-cn-gpb/?ca=drs-tp4608

 

方法二:

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

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

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


  1. package Feinno.Practice.Learn; 
  2.  
  3. option java_package = "Feinno.Practice.Learn"
  4. option java_outer_classname = "ProtoBufferPractice"
  5.  
  6. message msgInfo  { 
  7.   required int32 ID = 1
  8.   required int64 GoodID = 2;        
  9.   required string Url = 3
  10.   required string Guid = 4
  11.   required string Type = 5
  12.   required int32 Order = 6
package Feinno.Practice.Learn;

option java_package = "Feinno.Practice.Learn";
option java_outer_classname = "ProtoBufferPractice";

message msgInfo  {
  required int32 ID = 1;
  required int64 GoodID = 2;       
  required string Url = 3;
  required string Guid = 4;
  required string Type = 5;
  required int32 Order = 6;
}



 

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

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

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

7.使用方法(序列化):

  1. ProtoBufferPractice.msgInfo.Builder builder=ProtoBufferPractice.msgInfo.newBuilder(); 
  2.     builder.setGoodID(100); 
  3.     builder.setGuid("11111-23222-3333-444"); 
  4.     builder.setOrder(0); 
  5.     builder.setType("ITEM"); 
  6.     builder.setID(10); 
  7.     builder.setUrl("http://xxx.jpg"); 
  8.     ProtoBufferPractice.msgInfo info=builder.build(); 
  9.  
  10.     byte[] result=info.toByteArray() ; 
ProtoBufferPractice.msgInfo.Builder builder=ProtoBufferPractice.msgInfo.newBuilder();
    builder.setGoodID(100);
    builder.setGuid("11111-23222-3333-444");
    builder.setOrder(0);
    builder.setType("ITEM");
    builder.setID(10);
    builder.setUrl("http://xxx.jpg");
    ProtoBufferPractice.msgInfo info=builder.build();

    byte[] result=info.toByteArray() ;



 


8.反序列化:

  1. try
  2.         ProtoBufferPractice.msgInfo msg = ProtoBufferPractice.msgInfo.parseFrom(result); 
  3.         System.out.println(msg); 
  4.     } 
  5.     catch(Exception ex){ 
  6.         System.out.println(ex.getMessage()); 
  7.     } 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值