1 / 16
文档名称:

protobuf入门.docx

格式:docx   大小:166KB   页数:16页
下载后只包含 1 个 DOCX 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

protobuf入门.docx

上传人:marry201208 2019/6/25 文件大小:166 KB

下载得到文件列表

protobuf入门.docx

文档介绍

文档介绍:,这篇文章我们将会:,在其内定义一些PBmessage使用PB编译器使用PBJavaAPI读写数据这篇文章仅是入门手册,如果想深入学****及了解,可以参看: ProtocolBufferLanguageGuide, JavaAPIReference, JavaGeneratedCodeGuide,以及EncodingReference。“通讯簿”这样一个非常简单的应用来举例。该应用能够写入并读取“联系人”信息,每个联系人由name,ID,emailaddress以及contactphotonumber组成。这些信息的最终存储在文件中。如何序列化并检索这样的结构化数据呢?有以下解决方案: 使用Java序列化(JavaSerialization)。这是最直接的解决方式,因为该方式是内置于Java语言的,但是,这种方式有许多问题(EffectiveJava对此有详细介绍),而且当有其他应用程序(比如C++程序及Python程序书写的应用)与之共享数据的时候,这种方式就不能工作了。将数据项编码成一种特殊的字符串。例如将四个整数编码成“12:3:-23:67”。这种方法简单且灵活,但是却需要编写独立的,只需要用一次的编码和解码代码,并且解析过程需要一些运行成本。这种方式对于简单的数据结构非常有效。将数据序列化为XML。这种方式非常诱人,因为易于阅读(某种程度上)并且有不同语言的多种解析库。在需要与其他应用或者项目共享数据的时候,这是一种非常有效的方式。但是,XML是出了名的耗空间,在编码解码上会有很大的性能损耗。而且呢,操作XMLDOM数非常的复杂,远不如操作类中的字段简单。ProtocolBuffers可以灵活,高效且自动化的解决该问题,只需要:,piler创建一个类,该类可以高效的,以二进制方式自动编码和解析PB数据该生成类提供组成PB数据字段的getter和setter方法,甚至考虑了如何高效的读写PB数据。更厉害的是,PB友好的支持字段拓展,拓展后的代码,依然能够正确的读取原来格式编码的数据。。非常简单,每一个需要序列化的数据结构,编码一个PBmessage,然后为message中的字段指明一个名字和类型即可。该“通讯簿”:packagetutorial;optionjava_package="";optionjava_outer_classname="AddressBookProtos";messagePerson{requiredstringname=1;requiredint32id=2;optionalstringemail=3;ype{MOBILE=0;HOME=1;WORK=2;}messagePhoneNumber{requiredstringnumber=1;ypetype=2[default=HOME];}repeatedPhoneNumberphone=4;}messageAddressBook{ repeatedPersonperson=1;}可以看到,语法非常类似Java或者C++,接下来,我们一条一条来过一遍每句话的含义:.proto文件以一个package声明开始。该声明有助于避免不同项目建设的命名冲突。Java版的PB,在没有指明java_package的情况下,生成的类默认的package即为此package。这里我们生命的java_package,.。这里需要强调一下,即使指明了java_package,。在package声明之后,紧接着是专门为java指定的两个选项:java_package以及java_outer_classname。java_package我们已经说过,不再赘述。java_outer_classname为生成类的名字,。如果该选项不显式指明的话,会按照驼峰规则,。例如“”将会是“Addressbook”,“”即为“AddressBook”java指定选项后边,即为message定义。每个message是一个包含了一系列指明了类型的字段的集合。这里的字段类型包含大多数的标准简单数据类型,包括bool,int32,float,double以及string。Messa