Java protobuf框架使用向导

来源:互联网 发布:linux修改vim配置 编辑:程序博客网 时间:2024/06/02 04:34



一键收藏,随时查看,分享好友!

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

AD:2014WOT全球软件技术峰会北京站 课程视频发布


    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文件:

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

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

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

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

    7.使用方法:

    1. package com.protobuftest;  
    2.  
    3. import java.util.List;  
    4. import com.google.protobuf.InvalidProtocolBufferException;  
    5. import com.protobuftest.protobuf.PersonProbuf;  
    6. import com.protobuftest.protobuf.PersonProbuf.Person;  
    7. import com.protobuftest.protobuf.PersonProbuf.Person.PhoneNumber;  
    8. import com.protobuftest.protobuf.PersonProbuf.Person.PhoneNumberOrBuilder;  
    9. import com.protobuftest.protobuf.PersonProbuf.Person.PhoneType;  
    10.  
    11. public class ProtoBufTest {  
    12. /**  
    13.  * @param args  
    14.  */ 
    15. public static void main(String[] args) {  
    16. // TODO Auto-generated method stub  
    17. PersonProbuf.Person.Builder builder = PersonProbuf.Person.newBuilder();  
    18. builder.setEmail("kkk@email.com");  
    19. builder.setId(1);  
    20. builder.setName("TestName");  
    21. builder.addPhone(PersonProbuf.Person.PhoneNumber.newBuilder().setNumber("131111111").setType(PersonProbuf.Person.PhoneType.MOBILE));  
    22. builder.addPhone(PersonProbuf.Person.PhoneNumber.newBuilder().setNumber("011111").setType(PersonProbuf.Person.PhoneType.HOME));  
    23. Person person = builder.build();  
    24. byte[] buf = person.toByteArray();  
    25. try {  
    26. Person person2 = PersonProbuf.Person.parseFrom(buf);  
    27. System.out.println(person2.getName() + ", " + person2.getEmail());  
    28. List<PhoneNumber> lstPhones = person2.getPhoneList();  
    29. for (PhoneNumber phoneNumber : lstPhones) {  
    30. System.out.println(phoneNumber.getNumber());  
    31. }  
    32. catch (InvalidProtocolBufferException e) {  
    33. // TODO Auto-generated catch block  
    34. e.printStackTrace();  
    35. }  
    36. System.out.println(buf);  
    37. }  

    源文档 <http://blog.csdn.net/csharp25/article/details/6632127

    原文链接:http://www.cnblogs.com/brainy/archive/2012/05/11/2496581.html

    0 0
    原创粉丝点击