# Protobuf 使用
Google Protocol Buffer( 简称 Protobuf) 是 Google 公司内部的混合语言数据标准。他们用于 RPC 系统和持续数据存储系统。提供一个具有高效的协议数据交换格式工具库(类似Json)。但相比于Json,Protobuf有更高的转化效率,时间效率和空间效率都是JSON的3-5倍。
可用于通讯协议、数据存储等领域的语言无关、平台无关、可扩展的序列化结构数据格式。目前提供了 C++
、Java
、Python
、OC
、Swift
等语言的 API
# Protoc 编译
Protobuf 编译器,可以将 .proto
定义中的数据模型, 通过Protobuf 编译器将该文件编译成目标语言对象模型(Java
、OC
)
Protoc下载地址 (opens new window) ,找到protoc-3.6.1-win32.zip进行下载
解压protoc-3.6.1-win32.zip,位于
C:\Users\zhengz\Desktop\protoBuf\protoc-3.6.1
运行命令,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
- Maven下载地址 (opens new window)
- 配置环境变量 新增-> MAVEN_HOME D:\apache-maven-3.5.4
- 配置Path -> %MAVEN_HOME%\bin
# 编译Protobuf
Protobuf 下载地址 (opens new window) ,找到 protobuf-java-3.6.1.zip进行下载
解压protobuf-java-3.6.1.zip,位于 C:\Users\zhengz\Desktop\protoBuf\protobuf-3.6.1
获取编译器文件
protoc.exe
(位于C:\Users\zhengz\Desktop\protoBuf\protoc-3.6.1\bin)将
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
... maven依赖包安装与编译(时间比较长一些)
编译成功,生成两个jar文件
protobuf-java-3.6.1.jar
、protobuf-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
jar
包可以拿到 Android工程中进行使用