Android培训课程-Google-Protocol-Buffer.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
JSON相信大家都知道是什么东西,Protobuffer大家估计就很少听说了,但如果说到是GOOGLE推出的,相信大家都会有兴趣了解一下,毕竟GOOGLE出品,多属精品。Protobuffer是一个类似JSON的一个传输协议,其实准确来说不应该叫协议,而是定义了数据封装的格式。那它跟JSON有什么区别呢?跨语言,这是它的一个优点。它自带了一个编译器,protoc,只需要用它进行编译,可以编译成JAVA、python、C++代码,暂时只有这三个,其他就暂时不要想了,然后就可以直接使用,不需要再写任何其他代码。JSON当然也是跨语言的,但这个跨语言是建立在编写代码的基础上,bean的定义和数据解析还得自己做。我们直接来看看,为什么我们需要对比protobuffer(下面简称GPB)和JSON。1、JSON因为有一定的格式,并且是以字符存在的,在数据量上还有可以压缩的空间。而GPB上大数据量时,空间比JSON小很多,等一下的例子我们可以看到。2、JSON各个库之间的效率相差比较大,jackson库和GSON就大概有5-10的差距(这个只做过一次测试,如有误,请大家轻拍)。而GPB只需要一个,没有所谓的多个库的区别。?Talk?is?cheap,Just?show?me?the?code。在程序界,代码永远是王道,下面就直接来代码吧。上代码前,大家要先下载protobuffer,在这里:/p/protobuf/downloads/list注意,需要下载两个,一个是complier,另外一个是source?code,相信这个难不倒大家了,这里略过。1、首先,GPB是需要有一个类似类定义的文件,叫proto文件?。我们以学生和老师的例子来进行一个例子:我们有以下两个文件:to?Java代码??option?java_package?=?com.shun;??option?java_outer_classname?=?StudentProto;??message?Student?{??????required?int32?id?=?1;??????optional?string?name?=?2;??????optional?int32?age?=?3;??}?toJava代码??import?to;??option?java_package?=?com.shun;??option?java_outer_classname?=?TeacherProto;??message?Teacher?{??????required?int32?id?=?1;??????optional?string?name?=?2;??????repeated?Student?student_list?=?3;??}这里我们遇到了一些比较奇怪的东西:import,int32,repated,required,optional,option等一个个来吧:1)import表示引入其他的proto文件2)required,optional表示字段是否可选,这个决定了该字段有无值的情况下protobuffer会进行什么处理。如果标志了required,但当处理时,该字段没有进行传值,则会报错;如果标志了optional,不传值则不会有什么问题。3)repeated相信应该都看得懂了,就是是否重复,也就是数据或集合4)message就是相当于class了5)option表示选项,其中的java_package表示包名,即生成JAVA代码时使用的包名,java_outer_classname即为类名,注意这个类名不能跟下面的message中的类名相同。至于还有其他的选项和相关类型的,请参观官方文档。?2、有了这几个文件,我们能怎么样呢?记得上面下载的编译器了吧,解压出来,我们得到一个protoc.exe,这当然是windows下的,我没弄其他系统的,有兴趣的同学去折腾下罗。加到path(加不加可以随便,只是方不方便而已),然后就可以通过上面的文件生成我们需要的类文件了。protoc?--java_out=存放源代码的路径?--proto_path=proto文件的路径?proto具体文件--proto_path指定的是proto文件的文件夹路径,并不是单个文件,主要是为了import文件查找使用的,可以省略?如我需要把源代码放在D:\protobufferVsJson\src,而我的proto文件存放在D:\protoFiles那么我的编译命令就是:protoc?--java_out=D:\protobufferVsJson\src?D:\protoFiles\to?D:\protoFiles\to注意,这里最后的文件,我们需要指定需要编译的所有文件?编译后可以看到生成的文件。

文档评论(0)

wuailuo + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档