奈學:一起了解幾種序列化協議
序列化(編碼)是將物件序列化為二進位制形式(位元組陣列),主要用於網路傳輸、資料持久化等;而反序列化(解碼)則是將從網路、磁碟等讀取的位元組陣列還原成原始物件,主要用於網路傳輸物件的解碼,以便完成遠端呼叫。
影響序列化效能的關鍵因素:序列化後的碼流大小(網路頻寬的佔用)、序列化的效能(CPU資源佔用);是否支援跨語言(異構系統的對接和開發語言切換)。
Java預設提供的序列化:無法跨語言、序列化後的碼流太大、序列化的效能差
XML,優點:人機可讀性好,可指定元素或特性的名稱。缺點:序列化資料只包含資料本身以及類的結構,不包括型別標識和程式集資訊;只能序列化公共屬性和欄位;不能序列化方法;檔案龐大,檔案格式複雜,傳輸佔頻寬。適用場景:當做配置檔案儲存資料,實時資料轉換。
JSON,是一種輕量級的資料交換格式,優點:相容性高、資料格式比較簡單,易於讀寫、序列化後資料較小,可擴充套件性好,相容性好、與XML相比,其協議比較簡單,解析速度比較快。缺點:資料的描述性比XML差、不適合效能要求為ms級別的情況、額外空間開銷比較大。適用場景(可替代XML):跨防火牆訪問、可調式性要求高、基於Web browser的Ajax請求、傳輸資料量相對小,實時性要求相對低(例如秒級別)的服務。
Fastjson,採用一種“假定有序快速匹配”的演算法。優點:介面簡單易用、目前java語言中最快的json庫。缺點:過於注重快,而偏離了“標準”及功能性、程式碼質量不高,文件不全。適用場景:協議互動、Web輸出、Android客戶端
Thrift,不僅是序列化協議,還是一個RPC框架。優點:序列化後的體積小, 速度快、支援多種語言和豐富的資料型別、對於資料欄位的增刪具有較強的相容性、支援二進位制壓縮編碼。缺點:使用者較少、跨防火牆訪問時,不安全、不具有可讀性,除錯程式碼時相對困難、不能與其他傳輸層協議共同使用(例如HTTP)、無法支援向持久層直接讀寫資料,即不適合做資料持久化序列化協議。適用場景:分散式系統的RPC解決方案
Avro,Hadoop的一個子專案,解決了JSON的冗長和沒有IDL的問題。優點:支援豐富的資料型別、簡單的動態語言結合功能、具有自我描述屬性、提高了資料解析速度、快速可壓縮的二進位制資料形式、可以實現遠端過程呼叫RPC、支援跨程式語言實現。缺點:對於習慣於靜態型別語言的使用者不直觀。適用場景:在Hadoop中做Hive、Pig和MapReduce的持久化資料格式。
Protobuf,將資料結構以.proto檔案進行描述,透過程式碼生成工具可以生成對應資料結構的POJO物件和Protobuf相關的方法和屬性。優點:序列化後碼流小,效能高、結構化資料儲存格式(XML JSON等)、透過標識欄位的順序,可以實現協議的前向相容、結構化的文件更容易管理和維護。缺點:需要依賴於工具生成程式碼、支援的語言相對較少,官方只支援Java 、C++ 、python。適用場景:對效能要求高的RPC呼叫、具有良好的跨防火牆的訪問屬性、適合應用層物件的持久化
其它
protostuff 基於protobuf協議,但不需要配置proto檔案,直接導包即可
Jboss marshaling 可以直接序列化java類, 無須實java.io.Serializable介面
Message pack 一個高效的二進位制序列化格式
Hessian 採用二進位制協議的輕量級remoting onhttp工具
kryo 基於protobuf協議,只支援java語言,需要註冊(Registration),然後序列化(Output),反序列化(Input)
本文來源於:奈學開發者社群
如有侵權,請聯絡我刪除~
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69976011/viewspace-2709537/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- C# Modbus協議 幾種常用格式C#協議
- 11種你需要了解的物聯網(IoT)協議協議
- 幾種序列化協議(protobuf,xstream,jackjson,jdk,hessian)相關資料對比協議JSONJDK
- 你需要了解的HTTP協議HTTP協議
- Dubbo 支援哪些序列化協議?協議
- Proto3序列化協議協議
- 通訊協議之序列化協議
- 幾種儲存介面協議全面比較(轉載)協議
- 各種協議協議
- 播放RTMP協議的流媒體的幾種選擇協議
- 程式設計師和特種兵 幾分相似幾分無奈程式設計師
- Spearal:一個全新的序列化協議協議
- 基於HTTP協議的幾種實時資料獲取技術HTTP協議
- 用 Go 來了解一下 Redis 通訊協議GoRedis協議
- Netty、MINA、Twisted一起學系列04:定製自己的協議Netty協議
- http協議學習系列(協議詳解篇)HTTP協議
- 我們一起聊聊什麼是NAT協議協議
- HTTP協議幾個版本的比較HTTP協議
- 利用PHAR協議進行PHP反序列化攻擊協議PHP
- HTTP 協議六種請求方法HTTP協議
- Http協議學習(轉)HTTP協議
- 自我學習HTTP協議HTTP協議
- http協議中比較重要的幾個頭HTTP協議
- 4種傳輸協議設定,檔案傳輸協議如何選擇?協議
- 【網路協議】IP協議、ARP協議、RARP協議協議
- UDP 和 TCP 兩種協議簡介UDPTCP協議
- 五種開源協議的比較協議
- 物流網首選協議,關於 MQTT 你需要了解這些協議MQQT
- Raft協議學習筆記Raft協議筆記
- BGP路由協議學習一路由協議
- Raft 協議學習筆記Raft協議筆記
- IP協議學習筆記協議筆記
- 學習筆記 - DNS協議筆記DNS協議
- RTSP協議、RTMP協議、HTTP協議的區別協議HTTP
- iOS Swift 建立代理協議的多種方式iOSSwift協議
- ENSP上各種基礎協議的配置協議
- 一起玩轉微服務(6)——通訊協議如何統一微服務協議
- 【網路協議】UDP協議協議UDP