protobuf 的優缺點

什麼是protobuf

protobuf(Google Protocol Buffers)
Google提供一個具備高效的協議數據交換格式工具庫(相似Json)。
但相比於Json,Protobuf有更高的轉化效率,時間效率和空間效率都是JSON的3-5倍。java

protobuf優勢

一、性能好/效率高

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

空間開銷:也減小了不少編程

二、有代碼生成機制

好比你你寫個一下相似結構體的內容json

message testA  
{  
    required int32 m_testA = 1;  
}

像寫一個這樣的結構,protobuf能夠自動生成它的.h 文件和點.cpp文件。
protobuf將對結構體testA的操做封裝成一個類。服務器

三、支持向後兼容和向前兼容

當客戶端和服務器同事使用一塊協議的時候, 當客戶端在協議中增長一個字節,並不會影響客戶端的使用編程語言

四、支持多種編程語言

在Google官方發佈的源代碼中包含了c++、java、Python三種語言ide

protobuf缺點

一、二進制格式致使可讀性差

爲了提升性能,protobuf採用了二進制格式進行編碼。這直接致使了可讀性差。這個直接影響開發測試時候的效率。固然,通常狀況下,protobuf很是可靠,並不會出現太大的問題。工具

二、缺少自描述

通常來講,XML是自描述的,而protobuf格式則不是。 給你一段二進制格式的協議內容,不配合你寫的結構體是看不出來什麼做用的。性能

三、通用性差

protobuf雖然支持了大量語言的序列化和反序列化,但仍然並非一個跨平臺和語言的傳輸標準。在多平臺消息傳遞中,對其餘項目的兼容性並非很好,須要作相應的適配改造工做。相比json 和 XML,通用性仍是沒那麼好。測試

相關文章
相關標籤/搜索