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

java常見(jiàn)的序列化方式

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

在遠(yuǎn)程調(diào)用中,需要把參數(shù)和返回值通過(guò)網(wǎng)絡(luò)傳輸,這個(gè)使用就要用到序列化將對(duì)象轉(zhuǎn)變成字節(jié)流,從一端到另一端之后再反序列化回來(lái)變成對(duì)象。

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

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

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

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

序列化是指將一個(gè)對(duì)象序列化成字節(jié)流,便于存儲(chǔ)或者網(wǎng)絡(luò)傳輸;而反序列化恰好相反,將字節(jié)流,變回一個(gè)對(duì)象.我們平常用的比較多的是hessian序列化方式和java序列化方式,兩種序列化方式的效率,以及序列化大小是不一樣的,從測(cè)試結(jié)果看,hessian好一點(diǎn).下面寫(xiě)了一個(gè)hessian序列化示例(沒(méi)有文件IO與網(wǎng)絡(luò)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;
}

另外一種常見(jiàn)的是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();

}

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 關(guān)于JDK8升級(jí)17及springboot?2.x升級(jí)3.x詳細(xì)指南

    關(guān)于JDK8升級(jí)17及springboot?2.x升級(jí)3.x詳細(xì)指南

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

    java ExecutorService使用方法詳解

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

    Spring Boot 整合 JWT的方法

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

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

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

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

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

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

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

    徹底搞懂Java多線程(三)

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

    Java幾個(gè)實(shí)例帶你進(jìn)階升華下篇

    與其明天開(kāi)始,不如現(xiàn)在行動(dòng),本文為你帶來(lái)幾個(gè)Java書(shū)寫(xiě)的實(shí)際案例,對(duì)鞏固編程的基礎(chǔ)能力很有幫助,快來(lái)一起往下看看吧
    2022-03-03
  • Java字節(jié)緩存流的構(gòu)造方法之文件IO流

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

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

    圖文詳解java反射機(jī)制及常用應(yīng)用場(chǎng)景

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

最新評(píng)論

滁州市| 侯马市| 昭觉县| 共和县| 绥宁县| 鄂托克旗| 海林市| 通江县| 上饶县| 高阳县| 沙洋县| 峨眉山市| 融水| 定州市| 开鲁县| 香港| 青岛市| 仲巴县| 汉阴县| 聂拉木县| 府谷县| 驻马店市| 新巴尔虎左旗| 阿巴嘎旗| 禄劝| 会理县| 三台县| 青岛市| 富平县| 清丰县| 唐海县| 宁远县| 香港| 岱山县| 镇沅| 西和县| 巢湖市| 共和县| 连江县| 沙雅县| 长沙市|