# Protobuf 使用

Google Protocol Buffer( 简称 Protobuf) 是 Google 公司内部的混合语言数据标准。他们用于 RPC 系统和持续数据存储系统。提供一个具有高效的协议数据交换格式工具库(类似Json)。但相比于Json,Protobuf有更高的转化效率,时间效率和空间效率都是JSON的3-5倍。 可用于通讯协议、数据存储等领域的语言无关、平台无关、可扩展的序列化结构数据格式。目前提供了 C++JavaPythonOCSwift等语言的 API

# Protoc 编译

Protobuf 编译器,可以将 .proto 定义中的数据模型, 通过Protobuf 编译器将该文件编译成目标语言对象模型(JavaOC

  1. Protoc下载地址 (opens new window) ,找到protoc-3.6.1-win32.zip进行下载

  2. 解压protoc-3.6.1-win32.zip,位于C:\Users\zhengz\Desktop\protoBuf\protoc-3.6.1

  3. 运行命令,DST_DIR表示要输出的java文件夹路径,SRC_DIR表示px.proto绝对路径

    protoc --java_out=$DST_DIR $SRC_DIR\Px.proto
    
    // protoc bin目录下
    cd C:\Users\zhengz\Desktop\protoBuf\protoc-3.6.1\bin 
    
    // Px.proto转换Px.java
    protoc --java_out=C:\Users\zhengz\Desktop\pb C:\Users\zhengz\Desktop\Px.proto
    

    执行后在 C:\Users\zhengz\Desktop\pb 路径下生成 Px.java,表示转换成功

    # Px.proto定义
    syntax = "proto3";
    package pbpackage;
    // 定义生成后Px.java的包路径
    option java_package = "com.maimaimai.reminders.bean.proto";
    
    // 消息响应
    message PxMessage {
        int32 code = 1; // 响应结果code
        string msg = 2; // 响应消息信息
        bytes data = 3;
    }
    
    // 群组数组
    message GroupsMessage {
        repeated Group groups = 1;  // 群组对象
        int32 anyMore = 2;          // 还有更多
    }
    
    //群组信息
    message Group {
        fixed64 gid = 1;          // 群组ID
        string name = 2;          // 群组名称
        fixed64 creatorUid = 3;   // 创建者ID
        int32 status = 4;         // 群组状态
        int64 createTime = 5;     // 创建时间
        int64 updateTime = 6;     // 更新时间
        fixed64 updatetimeId = 7; // 更新标识
        int32 memberCount = 8;    // 群成员个数
        int32 valid = 9;          // 对当前用户是否有效
        int32 isRead = 10;        // 消息已读(0未读,1已读)
    }
    ...
    
    # 数据转换
    private DataSet responeProtobuf(ResponseBody responseBody) {
        DataSet dataSet = new DataSet();
        Px.PxMessage pxMessage = null;
        try {
            pxMessage = Px.PxMessage.parseFrom(responseBody.byteStream());
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    

# Protobuf工具包

我们在使用protobuf的时候,有些场景是需要快速把protobuf生成的对象转成json的,protobuf提供了很方便的方法来实现这个功能,但是这个功能并不包含在核心包里,需要依赖protobuf的工具包,也可以编译出工具包

# 安装Maven

  1. Maven下载地址 (opens new window)
  2. 配置环境变量 新增-> MAVEN_HOME D:\apache-maven-3.5.4
  3. 配置Path -> %MAVEN_HOME%\bin

# 编译Protobuf

  1. Protobuf 下载地址 (opens new window) ,找到 protobuf-java-3.6.1.zip进行下载

  2. 解压protobuf-java-3.6.1.zip,位于 C:\Users\zhengz\Desktop\protoBuf\protobuf-3.6.1

  3. 获取编译器文件 protoc.exe(位于C:\Users\zhengz\Desktop\protoBuf\protoc-3.6.1\bin)

  4. protoc.exe 拷贝到 C:\Users\zhengz\Desktop\protoBuf\protobuf-3.6.1\src 路径下

    cd C:\Users\zhengz\Desktop\protoBuf\protobuf-3.6.1\java 
    
    // 运行命令,编译protobuf-3.6.1
    mvn install
    
  5. ... maven依赖包安装与编译(时间比较长一些)

  6. 编译成功,生成两个jar文件 protobuf-java-3.6.1.jarprotobuf-java-util-3.6.1.jar

    // 生成的jar文件绝对路径
    C:\Users\zhengz\Desktop\protoBuf\protobuf-3.6.1\java\core\target\protobuf-java-3.6.1.jar
    C:\Users\zhengz\Desktop\protoBuf\protobuf-3.6.1\java\util\target\protobuf-java-util-3.6.1.jar
    
  7. jar 包可以拿到 Android工程中进行使用

最后更新时间: 11/24/2021, 1:59:05 AM