1. 程式人生 > >Java中使用protobuf的基礎知識

Java中使用protobuf的基礎知識

protobuf的相比xml、json協議的優勢已經是很明顯的

首先 protobuf是一個開源專案,是goole內部久經考驗的一個東西。主要用於結構化資料序列化的靈活、高效、自動的方法,有如XML,不過他更小,更快,也更簡單。你可以定義自己的資料結構,然後使用程式碼生成器生成的程式碼來讀寫這個資料結構。甚至可以在無需重新部署程式的情況下更新資料結構。

protobuf的優點:

1、效能好/效率高

時間開銷: XML格式化(序列化)的開銷還好;但是XML解析(反序列化)的開銷就不敢恭維了。 但是protobuf在這個方面就進行了優化。可以使序列化和反序列化的時間開銷都減短。

空間開銷:也減少了很多

2、有程式碼生成機制

比如你你寫個一下類似結構體的內容

3、支援向後相容和向前相容

當客戶端和伺服器同事使用一塊協議的時候, 當客戶端在協議中增加一個位元組,並不會影響客戶端的使用

4、支援多種程式語言

在Google官方釋出的原始碼中包含了c++、java、Python三種語言

protobuf的缺陷

1、二進位制格式導致可讀性差

為了提高效能,protobuf採用了二進位制格式進行編碼。這直接導致了可讀性差。

2、缺乏自描述

一般來說,XML是自描述的,而protobuf格式則不是。 給你一段二進位制格式的協議內容,不配合你寫的結構體是看不出來什麼作用的。

總結起來也可以認為安全性好。

公司的專案利用protobuf與MQ和不同的系統進行通訊。很好的使用了protobuf的語言轉換的功能,web端(JAVA)與服務端(C++)的進行互動就是使用了protobuf。

protobuf正確使用姿勢:

第一步:下載protobuf的編譯器,並配置環境變數。

第二步:根據proto檔案生成.java檔案(就是所謂的模型)。

第三步:將生成的模型複製到我們的專案中使用。

這篇部落格主要關注點在如何生成.java檔案上,後期使用沒有著重講述。系統是win10的

2、配置protobuf環境變數,找到protoc.exe的路徑,如下圖:

3、執行編譯命令,首先需要cd到.proto檔案目錄下如:執行次指令碼:

protoc --proto_path=./ --java_out=./ ./Student.proto

 輸入腳本回車即可執行:

.java檔案就會生成了

最後給出.proto檔案給大家:

syntax = "proto3";
//生成檔案所在包名
option java_package = "com.demo";
//生成的java檔名
option java_outer_classname = "ProtoDemo";
 
message Student {
     int32 id = 1;
     string name = 2;
     string email = 3;
    //列舉類
    enum Sex {
        MAN = 0;
        WOMAN = 1;
    }
     Sex sex = 4 ;
 
    enum PhoneType{
        MOBILE = 0;
        HOME = 1;
        WORK = 2;
    }
    //內部類
    message PhoneNumber {
         string number = 1;
         PhoneType type = 2 ;
    }
    //集合
    repeated PhoneNumber phone = 5;
}

 哈哈哈~~~,大功告成!