android studio(火烈鸟版本)使用protobuf

一、简介

Protobuf 全称:Protocol Buffers,是 Google 推出的一种与平台无关、语言无关、可扩展的轻便高效的序列化数据存储格式,类似于我们常用的 xml 和 json。

二、特点

Protobuf 用两个字总结:小,快。用 Protobuf 序列化后的大小是 json 的十分之一,是 xml 格式的二十分之一,而且性能是他们的 5~100 倍。
通常情况下,我们使用 xml 或者 json 进行数据通信是没什么问题的,但是在高性能和大数据通信的情况下,如果有办法压缩数据量,提高传输效率,显然会给用户带来更快更流畅的体验,因此做 LiveChat 自研,Protobuf 成为我们进行数据传输的第一选择。

三、语法

Protobuf 常用关键字介绍
在这里插入图片描述

Protobuf 基本数据类型

暂时无法在飞书文档外展示此内容

基本数据类型默认值
暂时无法在飞书文档外展示此内容

protobuf文本示例:

//指定Protobuf版本
syntax = "proto3";
//指定包名
package com.example.testprotobuf;
//指定生成的类所在的包名位置
option java_package = "com.example.testprotobuf.internal";
option java_outer_classname = "AudioAcousticMngtProto";

message BandGain {
    uint32 bandID = 1;
    int32 gain = 2;
}

message Equalizer {
//repeated相当于集合类
    repeated BandGain bandGainList = 1;
}

message Equalizerstruct {
    uint32 bandnumber = 1;
    uint32 groupID = 2;
    Equalizer equalizer = 3;
}

message ProtoInt8 {
    int32 value = 1;
}

message ProtoUint8 {
    uint32 value = 1;
}

message ProtoBool {
    bool value = 1;
}

message ProtoString {
    string value = 1;
}

//注意:
//1、一个 Protobuf 文件里面可以添加多个消息类,也可以进行嵌套
//2、上面的 1,2,3,4 并不是给字段赋值,而是给每个字段定义一个唯一的编号。这些编号用于二进制格式中标识你的字段,并且在使用你的消息类型后不应更改
//3、1-15 的字段编号只占一个字节进行编码,16-2047 的字段编号占两个字节,包括字段编号和字段类型,因此建议更多的使用 1-15 的字段编号
//4、可以指定最小字段编号为 1,最大字段编号为 2^29 - 1 或 536870911。另外不能使用 19000-19999 的标识号,因为 protobuf 协议实现对这些进行了预留,同样,也不能使用任何以前保留(reserved) 的字段编号

四、具体使用

//配置环境:
//app目录下得build.gradle:
plugins {
    id 'com.android.application'
    id 'com.google.protobuf'
}

android {
 ......
    sourceSets {
        main {
            //实际测试指不指定无所谓,不影响 Java 文件生成
            proto {
                srcDir 'src/main/proto'
            }
        }
    }
}

protobuf {
    //配置 protoc 编译器
    protoc {
        artifact = 'com.google.protobuf:protoc:3.21.7'
    }
    //配置生成目录,编译后会在 build 的目录下生成对应的java文件
    generateProtoTasks {
        all().each { task ->
            task.builtins {
                remove java
            }
            task.builtins {
                java {}
            }
        }
    }
}


dependencies {
    implementation 'com.google.protobuf:protobuf-java:3.21.7'
    //....
}


//根目录下:build.gradle:
plugins {
    id 'com.android.application' version '8.0.2' apply false
    id 'com.android.library' version '8.0.2' apply false
    id 'com.google.protobuf' version '0.9.3' apply false
}
//java代码:示例序列化的过程
public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    public byte[] toByteArray() {
        AudioAcousticMngtProto.BandGain bandGain = AudioAcousticMngtProto.BandGain.newBuilder().setGain(1).setBandID(2).build();
        AudioAcousticMngtProto.Equalizer equalizer = AudioAcousticMngtProto.Equalizer.newBuilder().addBandGainList(bandGain).build();
        AudioAcousticMngtProto.Equalizerstruct proto_output = AudioAcousticMngtProto.Equalizerstruct.newBuilder().setBandnumber(3)
                .setGroupID(3)
                .setEqualizer(equalizer)
                .build();
        return proto_output.toByteArray();
    }
    public static AudioAcousticMngtProto.Equalizerstruct fromByteArray(byte[] data) {
        AudioAcousticMngtProto.Equalizerstruct equalizerstruct =null;
        try {
            return equalizerstruct = AudioAcousticMngtProto.Equalizerstruct.parseFrom(data);
        } catch (InvalidProtocolBufferException e) {
            e.printStackTrace();
        }
        return equalizerstruct;
    }
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要配置protobuf插件,需要以下步骤: 1. 在你的项目中,添加protobuf插件的依赖。可以在项目的构建文件(如pom.xml或build.gradle)中添加以下内容: Maven项目(pom.xml): ```xml <plugins> <plugin> <groupId>org.xolstice.maven.plugins</groupId> <artifactId>protobuf-maven-plugin</artifactId> <version>0.6.1</version> <configuration> <!-- protobuf相关配置 --> </configuration> <executions> <execution> <goals> <goal>compile</goal> <goal>test-compile</goal> </goals> </execution> </executions> </plugin> </plugins> ``` Gradle项目(build.gradle): ```groovy plugins { id "com.google.protobuf" version "0.8.13" } protobuf { // protobuf相关配置 } ``` 2. 配置protobuf插件的参数。可以根据需要在上述配置中进行具体的配置,包括源文件目录、输出目录、生成代码的语言等。一般来说,源文件目录是存放.proto文件的目录,输出目录是生成代码的存放目录。 3. 编写.proto文件。根据你的需求,编写符合protobuf语法规范的.proto文件定义你的数据结构。 4. 运行protobuf插件。可以通过命令行或者IDE中的插件工具来执行protobuf插件。执行后,protobuf插件会根据.proto文件生成相应的Java类文件或其他目标语言的类文件。 问题产生的原因是因为在使用protobuf时,需要将.proto文件编译成目标语言的类文件,以便在项目中使用。而protobuf插件就是为了简化这个过程而存在的。通过配置protobuf插件,我们可以指定.proto文件的位置和生成代码的目标语言,并可以在构建项目时自动执行protobuf插件,完成类文件的生成工作。 相关问题: 1. 有哪些常用的protobuf插件? 2. protobuf插件支持哪些目标语言的代码生成? 3. 如何在protobuf中定义嵌套类型? 4. 如何使用protobuf生成的Java类进行序列化和反序列化操作? 5. protobuf插件如何处理.proto文件中的枚举类型?

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值