1. 程式人生 > >九、編解碼技術

九、編解碼技術

一、Java序列化
基於Java提供的物件輸入和輸出流(ObjectInputStream和ObjectOutputStream),可以把Java物件作為可儲存的位元組陣列寫入檔案,也可以傳輸到網路中。對於我們開發人員來說,基於JDK預設的序列化機制可以避免操作底層的位元組陣列,從而提升開發效率。 序列化的目的: (1)網路傳輸 (2)物件持久化 當進行遠端跨程序服務呼叫時,需要把被傳輸的Java物件編碼為位元組陣列或者ByteBuffer物件,而當遠端服務讀取到ByteBuffer物件或者位元組陣列時,需要將其解碼為傳送時的Java物件。這就是Java物件的編解碼技術。而Java序列化僅僅是Java編解碼技術

的一種。

二、Java序列化的缺點
(1)無法跨語言 對於跨繼承的服務呼叫,服務提供者可能會使用C++或者其它語言開發,當我們需要和異構語言程序互動時,Java序列化就難以支援。 由於Java序列化技術是Java語言內部的私有協議,其它語言並不支援,對於使用者來說,就是個黑盒。由於Java序列化後的位元組陣列,別的語言無法進行反序列化,這就嚴重限制了它的應用。

(2)序列化後的碼流太大

(3)序列化效能太差

通過對比Java序列化和二進位制編碼的效能差異,可以得到序列化後的碼流大小和序列化的效能,表現的都很差,因此並不會選擇Java序列化作為遠端跨節點呼叫的編解碼框架。業界有許多優秀的編解碼框架,在克服了JDK預設序列化框架的缺點的基礎上,還增加了很多亮點,比如說Google的Protobuf

、Facebook的Thrift等。