Protobuf的使用

Protobuf是一種平臺(tái)無(wú)關(guān)、語(yǔ)言無(wú)關(guān)、可擴(kuò)展且輕便高效的序列化數(shù)據(jù)結(jié)構(gòu)的協(xié)議,可以用于網(wǎng)絡(luò)通信和數(shù)據(jù)存

儲(chǔ)。 可簡(jiǎn)單類比于 XML ,其具有以下特點(diǎn):

語(yǔ)言無(wú)關(guān)、平臺(tái)無(wú)關(guān): ProtoBuf 支持 Java、C++、Python 等多種語(yǔ)言,支持多個(gè)平臺(tái)

高效:比 XML 更?。? ~ 10倍)、更快(20 ~ 100倍)、更為簡(jiǎn)單

擴(kuò)展性、兼容性好:可以更新數(shù)據(jù)結(jié)構(gòu),而不影響和破壞原有的舊程序

總之、protobuf作為二進(jìn)制數(shù)據(jù)格式,比json、xml的壓縮比大、序列化效率高,同時(shí)能兼容舊程序,跨語(yǔ)言,跨平臺(tái)

一、引入插件

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同級(jí)目錄下創(chuàng)建proto目錄,并創(chuàng)建一個(gè)helloword.proto文件


三、執(zhí)行編譯

四、開(kāi)始使用

Helloword.HelloRequest helloRequest =

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

.setAge(18)

.build();

//獲得序列化后數(shù)據(jù)大小

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數(shù)據(jù)結(jié)構(gòu)

float? 對(duì)應(yīng)java中的float

double 對(duì)應(yīng)java中的double

int32?對(duì)應(yīng)java中的int

int64?對(duì)應(yīng)java中的long

bytes?對(duì)應(yīng)java中的ByteString

bool?對(duì)應(yīng)java中的boolean

string 對(duì)應(yīng)java中的String

unit32 對(duì)應(yīng)java中的int

unit64 對(duì)應(yīng)java中的long

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容