ObjectInputStream類(lèi)實(shí)現(xiàn)對(duì)象的反序列,ObjectOutputStream類(lèi)實(shí)現(xiàn)對(duì)...
點(diǎn)擊上方“Java進(jìn)階學(xué)習(xí)交流”,進(jìn)行關(guān)注
后臺(tái)回復(fù)“Java”即可獲贈(zèng)Java學(xué)習(xí)資料
今
日
雞
湯
春草明年綠,王孫歸不歸?大家好,我是Java進(jìn)階者。
前言
本文主要學(xué)習(xí)ObjectInputStream類(lèi)實(shí)現(xiàn)對(duì)象的反序列,ObjectOutputStream類(lèi)實(shí)現(xiàn)對(duì)象的序列化流,接下來(lái)小編帶大家一起來(lái)學(xué)習(xí)!
一、 ObjectInputStream類(lèi)
1.ObjectInputStream是對(duì)象的反序列化流,它是InputStream類(lèi)的子類(lèi)。
2.ObjectInputStream類(lèi)的構(gòu)造方法
public ObjectInputStream(InputStream in):創(chuàng)建指定的輸入流對(duì)象讀取ObjectInputStream。參數(shù)in表示指定的輸入流對(duì)象。
例子:
FileInputStream fs=new FileInputStream("test.txt");ObjectInputStream os=new ObjectInputStream(fs);
3.使用ObjectInputStream類(lèi)實(shí)現(xiàn)對(duì)象的反序列化例子
import java.io.*;class Person implements Serializable{// 實(shí)現(xiàn)序列化接口private String id,name;private int age;//構(gòu)造方法public Person(String id,String name, int age) {this.id = id;this.name = name;this.age = age;}public String getId() {return id;}public void setId(String id) {this.id = id;}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 class P18{public static void main(String[] args) throws Exception {//創(chuàng)建文件輸入流對(duì)象,讀取指定的文件FileInputStream fs=new FileInputStream("text/test");//創(chuàng)建對(duì)象輸入流ObjectInputStream os=new ObjectInputStream(fs);//讀取Person對(duì)象Person p=(Person)os.readObject();System.out.println("讀取文本的數(shù)據(jù)后顯示:");System.out.println("id="+p.getId()+"\tname="+p.getName()+"\tage="+p.getAge());}}
運(yùn)行的結(jié)果如下圖所示:

從上面的代碼中因?yàn)镻erson類(lèi)中屬性的私有的,使用訪問(wèn)器的方法set和get的方法,當(dāng)調(diào)用ObjectInputStream的readObject()方法把text目錄下的test的Person對(duì)象數(shù)據(jù)讀取出來(lái),這個(gè)就是反序列化。
二、ObjectOutputStream類(lèi)
1.ObjectOutputStream是對(duì)象的序列化流,它是OutputStream類(lèi)的子類(lèi)。
2.ObjectOutputStream類(lèi)的構(gòu)造方法
public ObjectOutputStream(OutputStream out):創(chuàng)建指定的輸出流對(duì)象寫(xiě)入ObjectOutputStream。參數(shù)out表示指定的輸出流對(duì)象。
例子:
FileOutputStream fs=new FileOutputStream("test.txt");ObjectOutputStream os=new ObjectOutputStream(fs);
對(duì)象輸出流使用writeObject(Object obj)方法將一個(gè)對(duì)象obj寫(xiě)入到一個(gè)文件,對(duì)象輸入流使用readObject()方法從源中讀取一個(gè)對(duì)象到程序中。
3.使用ObjectOutputStream類(lèi)實(shí)現(xiàn)對(duì)象的序列化例子
import java.io.FileOutputStream;import java.io.IOException;import java.io.ObjectOutputStream;import java.io.Serializable;public class Person implements Serializable{// 實(shí)現(xiàn)序列化接口private String id,name;private int age;//構(gòu)造方法public Person(String id,String name, int age) {this.id = id;this.name = name;this.age = age;}public String getId() {return id;}public void setId(String id) {this.id = id;}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) throws IOException {//創(chuàng)建一個(gè)Person對(duì)象Person p=new Person("C01","進(jìn)階者",18);System.out.println("寫(xiě)入文件前的數(shù)據(jù):");System.out.println("id="+p.getId()+"\tname="+p.getName()+"\tage="+p.getAge());//創(chuàng)建文件輸出流對(duì)象,把數(shù)據(jù)寫(xiě)入text目錄下的test.txt文件中FileOutputStream fs=new FileOutputStream("text/test.txt");//創(chuàng)建對(duì)象輸出流ObjectOutputStream os=new ObjectOutputStream(fs);os.writeObject(p);}}
運(yùn)行的結(jié)果如下圖所示:

從上面的代碼中,首先是對(duì)Person對(duì)象進(jìn)行實(shí)例化,它的id為c01,name為進(jìn)階者,年齡為18。當(dāng)調(diào)用ObjectOutputStream的writeObject()方法將Person對(duì)象寫(xiě)入text目錄下的test.txt。這就實(shí)現(xiàn)了序列化!
三、總結(jié)
????本文主要介紹了ObjectInputStream類(lèi)、ObjectOutputStream類(lèi)。ObjectInputStream類(lèi)是對(duì)象的反序列化流,它是InputStream類(lèi)的子類(lèi),介紹了它的構(gòu)造方法和方法,通過(guò)一個(gè)例子來(lái)學(xué)習(xí)使用ObjectInputStream類(lèi)實(shí)現(xiàn)對(duì)象的反序列化。ObjectOutputStream類(lèi)是是對(duì)象的序列化流,它是OutputStream類(lèi)的子類(lèi),通過(guò)一個(gè)例子來(lái)學(xué)習(xí)使用ObjectOutputStream類(lèi)實(shí)現(xiàn)對(duì)象的序列化。希望大家通過(guò)本文的學(xué)習(xí),對(duì)你有所幫助!
????我是Java進(jìn)階者,希望大家通過(guò)本文的學(xué)習(xí),對(duì)你有所幫助!歡迎大家加我微信,有問(wèn)題可以隨時(shí)幫大家解決噢,交個(gè)朋友也好哇~
-------------------?End?-------------------
往期精彩文章推薦:
淺談Java字符串的截取和分割、比較字符串
一篇文章教會(huì)你使用Java內(nèi)部類(lèi)、成員內(nèi)部類(lèi)、靜態(tài)內(nèi)部類(lèi)和方法內(nèi)部類(lèi)
一篇文章帶你了解Java選擇排序和垃圾回收機(jī)制
從Java角度看冒泡排序和多維數(shù)組

歡迎大家點(diǎn)贊,留言,轉(zhuǎn)發(fā),轉(zhuǎn)載,感謝大家的相伴與支持
想加入Java學(xué)習(xí)群請(qǐng)?jiān)诤笈_(tái)回復(fù)【入群】
萬(wàn)水千山總是情,點(diǎn)個(gè)【在看】行不行
