下载安卓APP箭头
箭头给我发消息

客服QQ:3315713922

Java高效可扩展的框架protobuf

作者:课课家教育     来源: http://www.kokojia.com点击数:794发布时间: 2016-03-11 13:52:20

标签: Java框架java模板Java编写

大神带你学编程,欢迎选课

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

高效的、可扩展框架Java protobuf_Java框架_课课家

  下面介绍的是使用java ProtoBuf的基本步骤:

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

  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 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 
*******************************
赞(0)
踩(0)
分享到:
华为认证网络工程师 HCIE直播课视频教程