1. 程式人生 > >java序列化解決方案

java序列化解決方案

序列化一般用在網路傳輸或者物件持久化中,通過將物件序列化為二進位制資料在網路層傳輸或者儲存。

java的jdk為我們開發提供了序列化方案,但是java提供的預設的序列化方法有很多弊端,在效能要求很高的系統中,不是一個好的方案。java預設的序列化方案有以下弊端:

1、無法跨語言 對於java序列化後的位元組陣列,別的語言無法反序列化,比如服務提供者用java序列化物件給c++呼叫者,c++呼叫者則無法反序列化; 2、序列化後的碼流太大 java預設方式序列化後的位元組陣列大小偏大,儲存佔空間,傳輸佔頻寬 3、序列化效能太低 序列化速度相對較慢 因此很多公司開發了自己的序列化框架,並且開源了,目前業界主流的有以下幾種序列化框架:
Google 的 Protobuf: 它將資料結構以.proto檔案進行描述,通過程式碼生成工具可以生成對應資料結構的POJO物件和Protobuf相關的方法和屬性 特點如下: 1、結構化儲存格式(xml.json) 2、高效的編解碼功能 3、語言無關,平臺無關,擴充套件性好 4、官方支援java.c++和python Facebook的Thrift 在多種不同的語言之間的通訊,Thrift可以作為高效能的通訊中介軟體使用,它支援資料序列化和多種型別的RPC服務 Thrift支援三種比較典型的編解碼方式: 1、通用的二進位制編解碼 2、壓縮二進位制編解碼 3、優化的可選欄位壓縮編解碼 JBoss 的Marshalling
JBoss Marshalling是一個Java物件的序列化API包,修正了JDk自帶的序列化包的很多問題,但又保持跟java.io.Serializable介面的相容 特點: 無需實現java.io.Serializable介面,即可實現java序列化 通過快取技術提升物件 的序列化效能 但是更多在JBoss內部使用,應用範圍有限 整理總結自Netty權威指南第二版