IDEA_2019.1版本中Protobuf的使用


一、Protobuf是什么

Protobuf 是 Google 發布的開源項目,全稱 Google Protocol(/'prəʊtəkɒl/,協議,草案) Buffers,是一種輕便高效的結構化數據存儲格式,可以用於結構化數據串行化,或者說序列化。它很適合做數據存儲或 RPC[遠程過程調用 remote procedure call ] 數據交換格式 。目前很多公司 http+json ==> tcp+protobuf
參考文檔 : https://developers.google.com/protocol-buffers/docs/proto 語言指南

二、為什么要使用Protobuf

1、Netty 本身的編碼解碼機制存在的問題

1.1 Netty 自身提供的 codec(編/解碼器)

Netty 提供的編碼器

StringEncoder,對字符串數據進行編碼
ObjectEncoder,對 Java 對象進行編碼
...

Netty 提供的解碼器

StringDecoder, 對字符串數據進行解碼
ObjectDecoder,對 Java 對象進行解碼
...

1.2 Netty 自身的 codec存在的問題

Netty 本身自帶的 ObjectDecoder 和 ObjectEncoder 可以用來實現 POJO 對象或各種業務對象的編碼和解碼,底層使用的仍是 Java 序列化技術 , 而Java 序列化技術本身效率就不高,存在如下問題:

1.無法跨語言
2.序列化后的體積太大,是二進制編碼的 5 倍多。
3.序列化性能太低

4.Protobuf 是以 message (信息)的方式來管理數據的.

5.支持跨平台、跨語言,即[客戶端和服務器端可以是不同的語言編寫的] (支持目前絕大多數語言,例如 C++、C#、Java、python 等)

6.高性能,高可靠性
7.使用 protobuf 編譯器能自動生成代碼,Protobuf 是將類的定義使用.proto 文件進行描述。說明,在idea 中編寫 .proto 文件時,會自動提示是否下載 .ptotot 編寫插件. 可以讓語法高亮。

8.然后通過 protoc.exe 編譯器根據.proto 自動生成.java 文件

2、protobuf 工作示意圖

三、IDEA安裝Protobuf

一、.proto文件語法高亮顯示需要安裝Protobuf Support插件:

網上的教程:

Intellij IDEA中使用Protobuf的正確姿勢

依次點擊Intellij中的“File”>"Settings>"Plugins"==>"Browse repositories",輸入Protobuf,點擊install:

而我的idea是2019.1版本,Plugins下面沒有Browse repositories這個選項,選擇磁盤安裝:

先進入官方地址下載插件:protobuf插件

將插件下載到桌面(不用解壓),打開idea,依次點擊:

“File”>"Settings>"Plugins">"設置按鈕">"install Plugin from Disk"==>找到剛剛下載的文件並且選中,之后會出現protobuf Support插件,選擇重啟Idea(Restart IDE),然后之前寫的XXX.proto文件就會變顏色。

四、maven的方式集成插件

在pom文件中引入依賴:

<properties>
   <java.version>1.8</java.version>
       <protobuf.version>3.7.0</protobuf.version>
       <grpc.version>1.9.1</grpc.version>
</properties>

<dependencies>
<!--protobuf3-->
        <dependency>
            <groupId>com.google.protobuf</groupId>
            <artifactId>protobuf-java</artifactId>
            <version>3.7.0</version>
        </dependency>
        <!--grpc-->
        <dependency>
            <groupId>io.grpc</groupId>
            <artifactId>grpc-netty</artifactId>
            <version>${grpc.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>io.grpc</groupId>
            <artifactId>grpc-protobuf</artifactId>
            <version>${grpc.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>io.grpc</groupId>
            <artifactId>grpc-stub</artifactId>
            <version>${grpc.version}</version>
            <scope>provided</scope>
        </dependency>
</dependencies>


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM