Protobuf的使用

2021-07-14  本文已影响0人  hellogoogle

Protobuf是一种平台无关、语言无关、可扩展且轻便高效的序列化数据结构的协议,可以用于网络通信和数据存

储。 可简单类比于 XML ,其具有以下特点:

语言无关、平台无关: ProtoBuf 支持 Java、C++、Python 等多种语言,支持多个平台

高效:比 XML 更小(3 ~ 10倍)、更快(20 ~ 100倍)、更为简单

扩展性、兼容性好:可以更新数据结构,而不影响和破坏原有的旧程序

总之、protobuf作为二进制数据格式,比json、xml的压缩比大、序列化效率高,同时能兼容旧程序,跨语言,跨平台

一、引入插件

buildscript {

repositories {

mavenCentral()

}

dependencies {

classpath 'com.google.protobuf:protobuf-gradle-plugin:0.8.13'

}

}

apply plugin: 'com.google.protobuf'

protobuf {

protoc {

artifact = 'com.google.protobuf:protoc:3.11.0'

}

generateProtoTasks {

all().each { task ->

task.builtins {

java {

option "lite"

}

}

}

}

}

dependencies{

implementation 'com.google.protobuf:protobuf-javalite:3.11.0'

}

二、安装IDEA插件并编写proto文件

在Java同级目录下创建proto目录,并创建一个helloword.proto文件

三、执行编译

四、开始使用

Helloword.HelloRequest helloRequest =

Helloword.HelloRequest.newBuilder().setName("Lance")

.setAge(18)

.build();

//获得序列化后数据大小

helloRequest.getSerializedSize();

//序列化

byte[] bytes = helloRequest.toByteArray();

//反序列化

try {

Helloword.HelloRequest helloRequest1 = Helloword.HelloRequest.parseFrom(bytes);

} catch (InvalidProtocolBufferException e) {

e.printStackTrace();

}

附录一:混淆配置:

-keep class * extends com.google.protobuf.GeneratedMessageLite { *; }

附录二:Protobuf数据结构

float  对应java中的float

double 对应java中的double

int32 对应java中的int

int64 对应java中的long

bytes 对应java中的ByteString

bool 对应java中的boolean

string 对应java中的String

unit32 对应java中的int

unit64 对应java中的long

上一篇 下一篇

猜你喜欢

热点阅读