Android使用ProtoBuf协议进行数据解析

ProtoBuf协议由Google出品的一个适用于IOT或其他硬件通信场景的数据协议。

ProtoBuf协议较一般APP与硬件交互使用的字节流而言更简单,对于byte和bit与多类型数据结构间转换不熟悉的小伙伴而言是个福音,同时ProtoBuf也可以有效避免byte数组中无用数据占位问题,减小数据传输量。

以上废话可以不看!!!

1、Probuf的引用

在Project的build.gradle中

步骤1.
        dependencies {
                classpath 'com.google.protobuf:protobuf-gradle-plugin:0.8.19' 
        }
步骤2.

             plugins {       

                        id 'com.google.protobuf' version '0.8.18' apply false

            }

在moudule的build.gradle中

步骤1.
        plugins {
            id 'com.google.protobuf'
        }
 步骤2.android标签根下,自定义protobuf文件存放位置

          sourceSets {                        

                 main {                                 

                        proto { //你的proto文件放置在此文件夹中                                         

                                srcDir 'src/main/proto'                                        

                        }                                  

                }                 

        }

步骤3. 添加dependencies

        implementation 'com.google.protobuf:protobuf-java:3.17.2'
        implementation 'com.google.protobuf:protoc:3.5.1'

步骤4.生成protobuf对应Java源码

protobuf {
    protoc {
        artifact = 'com.google.protobuf:protoc:3.5.1' // 也可以配置本地编译器路径
    }

    generateProtoTasks {
        all().each { task ->
            task.builtins {
                remove java
            }
            task.builtins {
                java {}// 生产java源码
            }
        }
    }
}

2、ProtoBuf的简单使用

        //byte数组生成ProtoBuf

        XxxProtoMsg xxxProtoMsg = XxxProtoMsg.parseFrom(byteArrays);

        //ProtoBuf解析

        String xxx = "";
        if (xxxProtoMsg.hasXxx()) {

                xxx = xxxProtoMsg.getXxx();

        }

         //ProtoBuf对象设置参数

         XxxProtoMsg commandHeader = XxxProtoMsg.newBuilder().setXxx("xxx").build();

        //ProtoBuf对象转字节数组

        byte[] bytes = xxxProtoMsg.toByteArray();

3、部分ProtoBuf关键字

//指定proto版本
syntax = "proto3";
//此proto文件名
package proto.demoProto;
//指定生成的proto java类地址,一般用app包名
option java_package = "com.company.project";
//指定生成的java类名XxxProto 
option java_outer_classname = "XxxProto";
//Message对象名,一般认为Message和Java中的Class关键字类似
message XxxProtoMsg {
        string xxx = 1;  // 参数
} 

2022年12月20日 于苏州姑苏

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值