日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

22(2)序列化以及反序列化

發(fā)布時(shí)間:2023/12/18 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 22(2)序列化以及反序列化 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

序列化:把要傳輸?shù)膶?duì)象以及相關(guān)信息轉(zhuǎn)成對(duì)應(yīng)的字節(jié)數(shù)組進(jìn)行存儲(chǔ)

反序列化:把字節(jié)數(shù)組轉(zhuǎn)回成相應(yīng)的對(duì)象

主要作用于數(shù)據(jù)傳輸

如果把要傳輸?shù)膶?duì)象以及相關(guān)信息(非靜態(tài)屬性)轉(zhuǎn)成對(duì)應(yīng)的字節(jié)數(shù)組進(jìn)行存儲(chǔ),并把該字節(jié)數(shù)組存儲(chǔ)在硬盤(pán)上,這個(gè)過(guò)程就是持久化,持久化包含序列化。?

數(shù)據(jù)落地就是把數(shù)據(jù)放到本地硬盤(pán)上做了持久化。

實(shí)現(xiàn)序列化的類ObjectOutputStream

反序列化的類 ?ObjectInputStream?

序列化和反序列化要注意以下幾點(diǎn)

1.對(duì)象要進(jìn)行序列化,要保證對(duì)象對(duì)應(yīng)的類要實(shí)現(xiàn)Serializable接口

2.序列化的是對(duì)象和相關(guān)屬性(靜態(tài)屬性不能序列化)

3.給非靜態(tài)屬性添加transient關(guān)鍵詞 就是表示該屬性不能被序列化

4.實(shí)現(xiàn)Serializable接口的這個(gè)類如果沒(méi)有指定序列化版本號(hào)(serialVersionUID),java在底層

就會(huì)根據(jù)屬性和方法算出當(dāng)時(shí)的版本號(hào),這個(gè)算出來(lái)的版本號(hào)就會(huì)隨著對(duì)象一起序列化出去

反序列化的時(shí)候就會(huì)獲取到序列化過(guò)來(lái)的版本號(hào),去計(jì)算此時(shí)的類的屬性和方法版本號(hào),反序列化

的時(shí)候就會(huì)拿著序列化過(guò)來(lái)的版本號(hào)和剛才計(jì)算好的版本號(hào)進(jìn)行比較,如果兩個(gè)版本號(hào)相等就反序列化

成功,如果兩個(gè)序列化的版本號(hào)不相等就反序列失敗

所以為了讓我們?cè)诳梢栽诟膭?dòng)類屬性的情況下保持序列化和反序列化的版本號(hào)一致保證每次反序列化成功。 要自己指定序列化版本號(hào)

5.集合和映射對(duì)象都不能序列化,只能遍歷集合或者映射一一去序列化存儲(chǔ)的對(duì)象

序列化對(duì)象

import java.io.Serializable;import org.omg.CORBA.PRIVATE_MEMBER; //想要實(shí)現(xiàn)序列化就是實(shí)現(xiàn)Serializable接口 public class Person implements Serializable {/*** java提供的序列化版本號(hào)*/private static final long serialVersionUID = 1L;private String name;private int age;//靜態(tài)屬性不能序列化static String classRoom;//transient 代表該屬性不能被序列化private transient double tall;public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public static void main(String[] args) {}}

序列化

//java.io.NotSerializableException ---沒(méi)有序列化異常 //帶able的異常大多都是沒(méi)有實(shí)現(xiàn)接口 //想要實(shí)現(xiàn)序列化就是實(shí)現(xiàn)Serializable接口public class ObjectOutputStreamDemo {public static void main(String[] args) throws FileNotFoundException, IOException {//創(chuàng)建對(duì)象Person p=new Person();//給對(duì)象屬性賦值p.setName("徐旺騎");p.setAge(24);//進(jìn)行序列化---創(chuàng)建序列化對(duì)象ObjectOutputStream oos =new ObjectOutputStream(new FileOutputStream("p.data"));//寫(xiě)出對(duì)象oos.writeObject(p);//把對(duì)象進(jìn)行序列化//關(guān)流 oos.close();}}

反序列化

public class ObjectInputStreamDemo {public static void main(String[] args) throws IOException, ClassNotFoundException {//創(chuàng)建反序列化對(duì)象ObjectInputStream ois =new ObjectInputStream(new FileInputStream("p.data"));//讀取對(duì)象 ----保證獲取的是傳入的對(duì)象Person p=(Person)ois.readObject(); //用對(duì)象原來(lái)的類型來(lái)接收數(shù)據(jù)//關(guān)流 ois.close();//獲取對(duì)象屬性System.out.println(p.getName()+p.getAge()); //徐旺騎24 }}

?

轉(zhuǎn)載于:https://www.cnblogs.com/xuwangqi/p/11243340.html

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)

總結(jié)

以上是生活随笔為你收集整理的22(2)序列化以及反序列化的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。