Protobuf的簡(jiǎn)要介紹及使用詳解
一、protobuf的應(yīng)用場(chǎng)景
在官方文檔中可以看到
protocol buffers 是一種語(yǔ)言無(wú)關(guān)、平臺(tái)無(wú)關(guān)、可擴(kuò)展的序列化結(jié)構(gòu)數(shù)據(jù)的方法,它可用于(數(shù)據(jù))通信協(xié)議、數(shù)據(jù)存儲(chǔ)等。 Protocol Buffers 是一種靈活,高效,自動(dòng)化機(jī)制的結(jié)構(gòu)數(shù)據(jù)序列化方法-可類(lèi)比 XML,但是比 XML 更小(3 ~ 10倍)、更快(20 ~ 100倍)、更為簡(jiǎn)單。
可以看到protobuf 與json相比具有 壓縮比高 、解壓縮速度更快的優(yōu)點(diǎn)
二、protobuf的使用
protobuf在使用上較為復(fù)雜,過(guò)程可以分為以下幾步:
- 編寫(xiě)java 的POJO類(lèi)
- 通過(guò)工具將java的POJO類(lèi),生成protobuf數(shù)據(jù)格式下的(在idea中可以下載Pojo2Proto插件)
- 新建一個(gè)以.proto的文件,并寫(xiě)入Pojo2Proto插件生成數(shù)據(jù)
- 通過(guò)proto.exe程序?qū)?proto文件編譯生成java類(lèi),該JAVA類(lèi)中定義有PB對(duì)該類(lèi)的數(shù)據(jù)格式定義、get/set操作、解/壓鎖數(shù)據(jù)的方法
POJO類(lèi)數(shù)據(jù):
public class Entity { private String key; private String value; public String getKey() { return key; } public void setKey(String key) { this.key = key; } public String getValue() { return value; } public void setValue(String value) { this.value = value; } }
生成的protobuf的數(shù)據(jù):
syntax = "proto3"; message Entity { string key = 1; string value = 2; }
通過(guò)protoc.exe進(jìn)行編譯
在proto.exe的下載地址 https://repo1.maven.org/maven2/com/google/protobuf/protoc/ 編譯Entity.proto文件
protoc-3.9.2-windows-x86_64.exe ./src/main/proto/Entity.proto --java_out=./src/main/java/src/
編譯后生成有 Entity OuterClass類(lèi)的文件 通過(guò) Entity OuterClass類(lèi)壓縮數(shù)據(jù)
StreamWrap.Entity.Builder builder = StreamWrap.Entity.newBuilder(); //構(gòu)造數(shù)據(jù) builder.setKey("123"); builder.setValue("123"); StreamWrap.Entity entity = builder.build(); //將該P(yáng)B類(lèi)轉(zhuǎn)換為二進(jìn)制數(shù)據(jù)格式 byte[] buff = entity.toByteArray();
通過(guò)EntityOuterClass類(lèi)解壓縮數(shù)據(jù)
總結(jié)
到此這篇關(guān)于Protobuf的簡(jiǎn)要介紹及使用的文章就介紹到這了,更多相關(guān)Protobuf使用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java設(shè)計(jì)模式之單態(tài)模式(Singleton模式)介紹
這篇文章主要介紹了Java設(shè)計(jì)模式之單態(tài)模式(Singleton模式)介紹,本文講解了如何使用單例模式、使用單例模式注意事項(xiàng)等內(nèi)容,需要的朋友可以參考下2015-03-03Java多線程之Semaphore實(shí)現(xiàn)信號(hào)燈
這篇文章主要給大家分享的是Java多線程之Semaphore實(shí)現(xiàn)信號(hào)燈的練習(xí),emaphore是計(jì)數(shù)信號(hào)量。Semaphore管理一系列許可證。每個(gè)acquire方法阻塞,直到有一個(gè)許可證可以獲得然后拿走一個(gè)許可證;下面一起進(jìn)入文章學(xué)習(xí)Semaphore的具體內(nèi)容2021-10-10Jmeter參數(shù)化實(shí)現(xiàn)方法及應(yīng)用實(shí)例
這篇文章主要介紹了Jmeter參數(shù)化實(shí)現(xiàn)方法及應(yīng)用實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-08-08解決@NonNull @org.jetbrains.annotations.NotNull報(bào)紅的問(wèn)題
這篇文章主要介紹了解決@NonNull @org.jetbrains.annotations.NotNull報(bào)紅的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-01-01SpringBoot使用slf4j日志并輸出到文件中的操作方法
這篇文章主要介紹了SpringBoot使用slf4j日志并輸出到文件中,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-08-08SpringBoot?@Value與@ConfigurationProperties二者有哪些區(qū)別
這篇文章主要介紹了SpringBoot?@Value與@ConfigurationProperties二者的區(qū)別,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧2022-10-10idea設(shè)置JVM運(yùn)行參數(shù)的幾種方式
對(duì)JVM運(yùn)行參數(shù)進(jìn)行修改是JVM性能調(diào)優(yōu)的重要手段,本文主要介紹了idea設(shè)置JVM運(yùn)行參數(shù)的幾種方式,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-04-04