奈學:一起了解幾種序列化協議
序列化(編碼)是將物件序列化為二進位制形式(位元組陣列),主要用於網路傳輸、資料持久化等;而反序列化(解碼)則是將從網路、磁碟等讀取的位元組陣列還原成原始物件,主要用於網路傳輸物件的解碼,以便完成遠端呼叫。
影響序列化效能的關鍵因素:序列化後的碼流大小(網路頻寬的佔用)、序列化的效能(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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 幾種序列化協議(protobuf,xstream,jackjson,jdk,hessian)相關資料對比協議JSONJDK
- C# Modbus協議 幾種常用格式C#協議
- 你需要了解的HTTP協議HTTP協議
- Proto3序列化協議協議
- Dubbo 支援哪些序列化協議?協議
- Netty、MINA、Twisted一起學系列04:定製自己的協議Netty協議
- 基於HTTP協議的幾種實時資料獲取技術HTTP協議
- 用 Go 來了解一下 Redis 通訊協議GoRedis協議
- 我們一起聊聊什麼是NAT協議協議
- HTTP協議幾個版本的比較HTTP協議
- 你想了解的DDS協議解決方案在這裡協議
- HTTP 協議六種請求方法HTTP協議
- 利用PHAR協議進行PHP反序列化攻擊協議PHP
- http協議中比較重要的幾個頭HTTP協議
- 4種傳輸協議設定,檔案傳輸協議如何選擇?協議
- UDP 和 TCP 兩種協議簡介UDPTCP協議
- 物流網首選協議,關於 MQTT 你需要了解這些協議MQQT
- iOS Swift 建立代理協議的多種方式iOSSwift協議
- ENSP上各種基礎協議的配置協議
- Raft協議學習筆記Raft協議筆記
- Raft 協議學習筆記Raft協議筆記
- BGP路由協議學習一路由協議
- redis自學(24)RESP協議Redis協議
- 學習筆記 - DNS協議筆記DNS協議
- IP協議學習筆記協議筆記
- 一起玩轉微服務(6)——通訊協議如何統一微服務協議
- Raft協議和ZAB協議Raft協議
- 無線通訊協議設計的幾點要素協議
- 自學 JAVA 的幾點建議Java
- Gossip協議也叫Epidemic協議(流行病協議)Go協議IDE
- 淺談TCP、UDP、ICMP三種常見協議TCPUDP協議
- TDengine:無模式寫入行協議的四種方式模式協議
- 使用wireshark學習網路協議協議
- Internet安全協議 學習筆記協議筆記
- Python學習之迭代器協議Python協議
- OAuth 2.0 協議學習筆記OAuth協議筆記
- 新手學習Java需要了解的幾個知識點!Java
- 頁面連結跳轉--指定協議,半協議,無協議協議