Protobuf的使用

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容