首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

Java protobuf框架使用指引

2013-11-12 
Java protobuf框架使用向导Java protobuf框架使用向导?ProtoBuf,全称是Protocol Buffers, 它是谷歌内部用

Java protobuf框架使用向导
Java protobuf框架使用向导

?

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

?

  1. package?tutorial;? ?option?java_package?=?"com.protobuftest.protobuf";? ?
  2. option?java_outer_classname?=?"PersonProbuf";? ?message?Person?{? ?
  3. ??required?string?name?=?1;? ???required?int32?id?=?2;? ?
  4. ??optional?string?email?=?3;? ???enum?PhoneType?{? ?
  5. ????MOBILE?=?0;? ?????HOME?=?1;? ?
  6. ????WORK?=?2;? ???}? ?
  7. ??message?PhoneNumber?{? ?????required?string?number?=?1;? ?
  8. ????optional?PhoneType?type?=?2?[default?=?HOME];? ???}? ?
  9. ??repeated?PhoneNumber?phone?=?4;? ???message?CountryInfo?{ ?
  10. ??????????required?string?name?=?1; ???????????required?string?code?=?2; ?
  11. ??????????optional?int32?number?=?3; ???} ?
  12. }? ?message?AddressBook?{? ?
  13. ??repeated?Person?person?=?1;? ?}??

?

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

?

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

?

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

?

7.使用方法:

?

  1. package?com.protobuftest; ??
  2. import?java.util.List; ?import?com.google.protobuf.InvalidProtocolBufferException; ?
  3. import?com.protobuftest.protobuf.PersonProbuf; ?import?com.protobuftest.protobuf.PersonProbuf.Person; ?
  4. import?com.protobuftest.protobuf.PersonProbuf.Person.PhoneNumber; ?import?com.protobuftest.protobuf.PersonProbuf.Person.PhoneNumberOrBuilder; ?
  5. import?com.protobuftest.protobuf.PersonProbuf.Person.PhoneType; ??
  6. public?class?ProtoBufTest?{ ?/** ?
  7. ?*?@param?args ??*/?
  8. public?static?void?main(String[]?args)?{ ?//?TODO?Auto-generated?method?stub ?
  9. PersonProbuf.Person.Builder?builder?=?PersonProbuf.Person.newBuilder(); ?builder.setEmail("kkk@email.com"); ?
  10. builder.setId(1); ?builder.setName("TestName"); ?
  11. 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)); ?
  12. Person?person?=?builder.build(); ?byte[]?buf?=?person.toByteArray(); ?
  13. try?{ ?Person?person2?=?PersonProbuf.Person.parseFrom(buf); ?
  14. System.out.println(person2.getName()?+?",?"?+?person2.getEmail()); ?List<PhoneNumber>?lstPhones?=?person2.getPhoneList(); ?
  15. for?(PhoneNumber?phoneNumber?:?lstPhones)?{ ?System.out.println(phoneNumber.getNumber()); ?
  16. } ?}?catch?(InvalidProtocolBufferException?e)?{ ?
  17. //?TODO?Auto-generated?catch?block ?e.printStackTrace(); ?
  18. } ?System.out.println(buf); ?
  19. } ?}?

?

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

?

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

热点排行