Java序列化和hessian序列化的區別
在遠端呼叫中,需要把引數和返回值通過網路傳輸,這個使用就要用到序列化將物件轉變成位元組流,從一端到另一端之後再反序列化回來變成物件。
既然前面有一篇提到了hessian,這裡就簡單講講Java序列化和hessian序列化的區別。
首先,hessian序列化比Java序列化高效很多,而且生成的位元組流也要短很多。但相對來說沒有Java序列化可靠,而且也不如Java序列化支援的全面。而之所以會出現這樣的區別,則要從它們的實現方式來看。
先說Java序列化,具體工作原理就不說了,Java序列化會把要序列化的物件類的後設資料和業務資料全部序列化從位元組流,而且是把整個繼承關係上的東西全部序列化了。它序列化出來的位元組流是對那個物件結構到內容的完全描述,包含所有的資訊,因此效率較低而且位元組流比較大。但是由於確實是序列化了所有內容,所以可以說什麼都可以傳輸,因此也更可用和可靠。
而hessian序列化,它的實現機制是著重於資料,附帶簡單的型別資訊的方法。就像Integer a = 1,hessian會序列化成I 1這樣的流,I表示int or Integer,1就是資料內容。而對於複雜物件,通過Java的反射機制,hessian把物件所有的屬性當成一個Map來序列化,產生類似M className propertyName1 I 1 propertyName S stringValue(大概如此,確切的忘了)這樣的流,包含了基本的型別描述和資料內容。而在序列化過程中,如果一個物件之前出現過,hessian會直接插入一個R index這樣的塊來表示一個引用位置,從而省去再次序列化和反序列化的時間。這樣做的代價就是hessian需要對不同的型別進行不同的處理(因此hessian直接偷懶不支援short),而且遇到某些特殊物件還要做特殊的處理(比如StackTraceElement)。而且同時因為並沒有深入到實現內部去進行序列化,所以在某些場合會發生一定的不一致,比如通過Collections.synchronizedMap得到的map。
相關文章
- Java的序列化和反序列化Java
- 序列化Serializable和Parcelable的理解和區別
- [Java基礎]序列化和反序列化Java
- Java物件的序列化和反序列化實踐Java物件
- 從java的序列化和反序列化說起Java
- 什麼是序列化?物件和類的區別?物件
- Java的序列化與反序列化Java
- Java序列化、反序列化、反序列化漏洞Java
- Java中的序列化與反序列化Java
- Python序列化模組pickle和json使用和區別PythonJSON
- Java基礎22--物件序列化和反序列化Java物件
- java的序列化Java
- python的序列化和反序列化Python
- PHP的序列化和反序列化入門PHP
- Java--序列化與反序列化Java
- java序列化Java
- Tinking in Java ---Java的NIO和物件序列化Java物件
- 深入分析Java的序列化與反序列化Java
- java的序列化SerializableJava
- java中的序列化Java
- Java:對一個物件序列化和反序列化的簡單實現Java物件
- .NET物件的XML序列化和反序列化物件XML
- 物件(List<T>)的序列化和反序列化物件
- [java IO流]之 序列化流和反序列化流(ObjectOutputStream/ObjectInputStream)JavaObject
- 使用 Jackson 序列化和反序列化 java.sql.BlobJavaSQL
- java 序列化與反序列化例項Java
- C++ 序列化和反序列化C++
- 什麼是Java序列化,如何實現java序列化Java
- Java安全基礎之Java序列化與反序列化Java
- 一文帶你全面瞭解java物件的序列化和反序列化Java物件
- Java物件表示方式1:序列化、反序列化和transient關鍵字的作用Java物件
- Java物件的序列化與反序列化-Json篇Java物件JSON
- Java——transient and 序列化Java
- java物件序列化Java物件
- Serializable java序列化Java
- java反序列化Java
- Java序列化(Serializable)與反序列化詳解Java
- java 物件序列化要序列化那些內容Java物件