ProtoBuf在Android端使用

作者: 辅助上分 | 来源:发表于2018-04-24 09:36 被阅读0次

Protocol Buffers是一种序列化数据结构的协议。对于通过管线(pipeline)或存储数据进行通信的程序开发上是很有用的。这个方法包含一个接口描述语言,描述一些数据结构,并提供程序工具根据这些描述产生代码,用于将这些数据结构产生或解析数据流。
它不依赖于语言和平台并且可扩展性极强。现阶段官方支持C++、JAVA、Python三种编程语言,但可以找到大量的几乎涵盖所有语言的第三方拓展包。
通过它,你可以定义你的数据的结构,并生成基于各种语言的代码。这些你定义的数据流可以轻松地在传递并不破坏你已有的程序。并且你也可以更新这些数据而现有的程序也不会受到任何的影响。

优势

比json体积更小,解析速度更快,能在弱网的时候传输的更快。因为是二进制流不易阅读,天然具备加密功能。

劣势

因为是二进制流,所以抓包调试会不方便。另外得使用脚本生成代码,所以开发效率较低。支持的第三方库也比较少。

使用ProtoBuf

1.下载地址下载对应需要的包,如果你需要生成java文件下载java对应的包即可。(或者通过是用gradle脚本方式跳过1 2步骤)

apply plugin: 'com.google.protobuf'
  protobuf {
      protoc {
          // Download from repositories
          artifact = 'com.google.protobuf:protoc:3.2.0'
      }
      plugins {
          javalite {
              // The codegen for lite comes as a separate artifact
              artifact = 'com.google.protobuf:protoc-gen-javalite:3.0.0'
          }
      }
      generateProtoTasks {
          all().each { task ->
              task.plugins {
                  javalite {}
              }
          }
      }
  }

  dependencies {
      compile "com.google.protobuf:protobuf-lite:3.0.1"
      compile 'com.google.protobuf:protobuf-java:3.0.0'
  }


2.解压包,cd protobuf-3.5.0 运行sh autogen.sh脚本,如果中途遇到缺少autoconf and automake包,请进入这个链接.再运行./configure,然后运行make,最后在运行 sudo make install ,这时候pb的环境已经搭好了。

3.创建proto类

syntax = "proto3";//版本
package cn.xiaoneng.npigeon.sdk.message;//包路径
option java_outer_classname = "NetWorkMessageProbuf";//class名字
message NetworkMessage {
    // messageid,必填
    string messageid = 1;
    // 消息类型
    int32 type = 2;
    // 发送者
    string fromUser = 3;

然后执行命令

protoc -I=ProtoSourceFileDirectory --java_out=JavaClassOutputDirectory ProtoSourFilePath

ProtoSourceFileDirectory:Proto源文件所在的目录

JavaClassOutputDirectory:JavaClass文件的输出目录

ProtoSourFilePath:Proto源文件的绝对地址

4.最后调用parseFrom就可以解析字节流或者字节数组生成对应的对象

NetWorkMessageProbuf.NetworkMessage networkMessage = NetWorkMessageProbuf.NetworkMessage.parseFrom(message.getPayload());

相关文章

网友评论

    本文标题:ProtoBuf在Android端使用

    本文链接:https://www.haomeiwen.com/subject/lyydlftx.html