ProtoBuf,全称是Protocol Buffers, 它是谷歌内部用的一种高效的、可扩展的对结构化数据进行编码的格式规范。谷歌自己内部很多程序之间的通信协议都用了ProtoBuf。
下面介绍的是使用Java ProtoBuf的基本步骤:
1.;,选择其中的win版本下载
2.下载一个protobuf-java-2.4.1.jar文件(注意,要与你刚才下的proto.exe版本相同,否则可能出现编译通不过现象)
3.在proto.exe同级目录,编写一个msg.proto文件:
packagetutorial; optionjava_package="com.protobuftest.protobuf"; optionjava_outer_classname="PersonProbuf"; messagePerson{ requiredstringname=1; requiredint32id=2; optionalstringemail=3; enumPhoneType{ MOBILE=0; HOME=1; WORK=2; } messagePhoneNumber{ requiredstringnumber=1; optionalPhoneTypetype=2[default=HOME]; } repeatedPhoneNumberphone=4; messageCountryInfo{ requiredstringname=1; requiredstringcode=2; optionalint32number=3; } } messageAddressBook{ repeatedPersonperson=1; }
4.使用如下命令编译这个文件:
5.将生成的ProtoBufferPractice.java文件引入eclipse
6.把下载的protobuf-java-2.4.1.jar也引入工程
7.使用方法:
packagecom.protobuftest; importjava.util.List; importcom.google.protobuf.InvalidProtocolBufferException; importcom.protobuftest.protobuf.PersonProbuf; importcom.protobuftest.protobuf.PersonProbuf.Person; importcom.protobuftest.protobuf.PersonProbuf.Person.PhoneNumber; importcom.protobuftest.protobuf.PersonProbuf.Person.PhoneNumberOrBuilder; importcom.protobuftest.protobuf.PersonProbuf.Person.PhoneType; publicclassProtoBufTest{ /** *@paramargs */ publicstaticvoidmain(String[]args){ //TODOAuto-generatedmethodstub PersonProbuf.Person.Builderbuilder=PersonProbuf.Person.newBuilder(); builder.setEmail(""); 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)); Personperson=builder.build(); byte[]buf=person.toByteArray(); try{ Personperson2=PersonProbuf.Person.parseFrom(buf); System.out.println(person2.getName()+","+person2.getEmail()); List<PhoneNumber>lstPhones=person2.getPhoneList(); for(PhoneNumberphoneNumber:lstPhones){ System.out.println(phoneNumber.getNumber()); } }catch(InvalidProtocolBufferExceptione){ //TODOAuto-generatedcatchblock e.printStackTrace(); } System.out.println(buf); } }
源文档 <;
尽量不要讲同事朋友的八卦。