最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java常見的序列化方式

 更新時間:2016年08月09日 15:24:41   作者:iphoenix  
這篇文章主要為大家詳細介紹了java中兩種常見的序列化方式,感興趣的小伙伴們可以參考一下

在遠程調用中,需要把參數(shù)和返回值通過網絡傳輸,這個使用就要用到序列化將對象轉變成字節(jié)流,從一端到另一端之后再反序列化回來變成對象。

既然前面有一篇提到了hessian,這里就簡單講講Java序列化和hessian序列化的區(qū)別。

首先,hessian序列化比Java序列化高效很多,而且生成的字節(jié)流也要短很多。但相對來說沒有Java序列化可靠,而且也不如Java序列化支持的全面。而之所以會出現(xiàn)這樣的區(qū)別,則要從它們的實現(xiàn)方式來看。

先說Java序列化,具體工作原理就不說了,Java序列化會把要序列化的對象類的元數(shù)據(jù)和業(yè)務數(shù)據(jù)全部序列化從字節(jié)流,而且是把整個繼承關系上的東西全部序列化了。它序列化出來的字節(jié)流是對那個對象結構到內容的完全描述,包含所有的信息,因此效率較低而且字節(jié)流比較大。但是由于確實是序列化了所有內容,所以可以說什么都可以傳輸,因此也更可用和可靠。

而hessian序列化,它的實現(xiàn)機制是著重于數(shù)據(jù),附帶簡單的類型信息的方法。就像Integer a = 1,hessian會序列化成I 1這樣的流,I表示int or Integer,1就是數(shù)據(jù)內容。而對于復雜對象,通過Java的反射機制,hessian把對象所有的屬性當成一個Map來序列化,產生類似M className propertyName1 I 1 propertyName S stringValue(大概如此,確切的忘了)這樣的流,包含了基本的類型描述和數(shù)據(jù)內容。而在序列化過程中,如果一個對象之前出現(xiàn)過,hessian會直接插入一個R index這樣的塊來表示一個引用位置,從而省去再次序列化和反序列化的時間。這樣做的代價就是hessian需要對不同的類型進行不同的處理(因此hessian直接偷懶不支持short),而且遇到某些特殊對象還要做特殊的處理(比如StackTraceElement)。而且同時因為并沒有深入到實現(xiàn)內部去進行序列化,所以在某些場合會發(fā)生一定的不一致,比如通過Collections.synchronizedMap得到的map。

序列化是指將一個對象序列化成字節(jié)流,便于存儲或者網絡傳輸;而反序列化恰好相反,將字節(jié)流,變回一個對象.我們平常用的比較多的是hessian序列化方式和java序列化方式,兩種序列化方式的效率,以及序列化大小是不一樣的,從測試結果看,hessian好一點.下面寫了一個hessian序列化示例(沒有文件IO與網絡IO,純粹序列化與反序列化):

/**
 * 純hessian序列化
 * @param object
 * @return
 * @throws Exception
 */
public static byte[] serialize(Object object) throws Exception{
if(object==null){
throw new NullPointerException();
}
ByteArrayOutputStream os = new ByteArrayOutputStream();
HessianSerializerOutput hessianOutput=new HessianSerializerOutput(os);
hessianOutput.writeObject(object);
return os.toByteArray();
}
/**
 * 純hessian反序列化
 * @param bytes
 * @return
 * @throws Exception
 */
public static Object deserialize(byte[] bytes) throws Exception{
if(bytes==null){
throw new NullPointerException();
}

ByteArrayInputStream is = new ByteArrayInputStream(bytes);
HessianSerializerInput hessianInput=new HessianSerializerInput(is);
Object object = hessianInput.readObject();
return object;
}

另外一種常見的是java序列化方式:

/**
 * java序列化
 * @param obj
 * @return
 * @throws Exception
 */
public static byte[] serialize(Object obj) throws Exception {
if (obj == null)
throw new NullPointerException();
ByteArrayOutputStream os = new ByteArrayOutputStream();
ObjectOutputStream out = new ObjectOutputStream(os);
out.writeObject(obj);
return os.toByteArray();
}
/**
 * java反序列化
 * @param by
 * @return
 * @throws Exception
 */
public static Object deserialize(byte[] by) throws Exception {
if (by == null)
throw new NullPointerException();
ByteArrayInputStream is = new ByteArrayInputStream(by);
ObjectInputStream in = new ObjectInputStream(is);
return in.readObject();

}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • 關于JDK8升級17及springboot?2.x升級3.x詳細指南

    關于JDK8升級17及springboot?2.x升級3.x詳細指南

    這篇文章主要介紹了關于JDK8升級17及springboot?2.x升級3.x的相關資料,還討論了JPA包路徑從javax改為jakarta,以及Spring?Boot版本升級和Redis配置調整等,需要的朋友可以參考下
    2025-01-01
  • java ExecutorService使用方法詳解

    java ExecutorService使用方法詳解

    這篇文章主要為大家詳細介紹了java ExecutorService使用方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-12-12
  • Spring Boot 整合 JWT的方法

    Spring Boot 整合 JWT的方法

    這篇文章主要介紹了Spring Boot 整合 JWT的方法,文中實例代碼非常詳細,幫助大家更好的理解和學習,感興趣的朋友可以了解下
    2020-07-07
  • SpringBoot生成二維碼的實現(xiàn)

    SpringBoot生成二維碼的實現(xiàn)

    這篇文章主要介紹了SpringBoot生成二維碼的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-12-12
  • SpringBoot使用Maven打包異常-引入外部jar的問題及解決方案

    SpringBoot使用Maven打包異常-引入外部jar的問題及解決方案

    這篇文章主要介紹了SpringBoot使用Maven打包異常-引入外部jar,需要的朋友可以參考下
    2020-06-06
  • 關于java關鍵字this和super的區(qū)別和理解

    關于java關鍵字this和super的區(qū)別和理解

    這篇文章主要給大家介紹了關于java關鍵字this和super的區(qū)別和理解的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-01-01
  • 徹底搞懂Java多線程(三)

    徹底搞懂Java多線程(三)

    這篇文章主要給大家介紹了關于Java面試題之多線程和高并發(fā)的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用java具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2021-07-07
  • Java幾個實例帶你進階升華下篇

    Java幾個實例帶你進階升華下篇

    與其明天開始,不如現(xiàn)在行動,本文為你帶來幾個Java書寫的實際案例,對鞏固編程的基礎能力很有幫助,快來一起往下看看吧
    2022-03-03
  • Java字節(jié)緩存流的構造方法之文件IO流

    Java字節(jié)緩存流的構造方法之文件IO流

    這篇文章主要介紹了Java字節(jié)緩存流的構造方法之文件IO流,同時也介紹了字符流中的一些相關的內容,并且通過大量的案例供大家理解。最后通過一些經典的案例幫助大家對前面所學的知識做了一個綜合的應用,需要的朋友可以參考一下
    2022-04-04
  • 圖文詳解java反射機制及常用應用場景

    圖文詳解java反射機制及常用應用場景

    這篇文章主要為大家介紹了圖文詳解java反射機制及常用應用場景,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-03-03

最新評論

阳信县| 塔城市| 余干县| 凭祥市| 棋牌| 长子县| 定安县| 宾川县| 沙田区| 沁水县| 安泽县| 乐清市| 泰兴市| 博兴县| 萝北县| 九龙城区| 汨罗市| 昭觉县| 和顺县| 通城县| 察雅县| 泽普县| 灵寿县| 平乐县| 京山县| 清徐县| 贞丰县| 河北区| 高州市| 九龙城区| 光泽县| 年辖:市辖区| 怀远县| 察隅县| 墨脱县| 潼南县| 新竹县| 苏尼特右旗| 张掖市| 布拖县| 涪陵区|