ObjectInputStream類實(shí)現(xiàn)對(duì)象的反序列,ObjectOutputStream類實(shí)現(xiàn)對(duì)象的序列化流
大家好,我是Java進(jìn)階者。
前言
本文主要學(xué)習(xí)ObjectInputStream類實(shí)現(xiàn)對(duì)象的反序列,ObjectOutputStream類實(shí)現(xiàn)對(duì)象的序列化流,接下來(lái)小編帶大家一起來(lái)學(xué)習(xí)!
一、 ObjectInputStream類
1.ObjectInputStream是對(duì)象的反序列化流,它是InputStream類的子類。
2.ObjectInputStream類的構(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類實(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類中屬性的私有的,使用訪問(wèn)器的方法set和get的方法,當(dāng)調(diào)用ObjectInputStream的readObject()方法把text目錄下的test的Person對(duì)象數(shù)據(jù)讀取出來(lái),這個(gè)就是反序列化。
二、ObjectOutputStream類
1.ObjectOutputStream是對(duì)象的序列化流,它是OutputStream類的子類。
2.ObjectOutputStream類的構(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類實(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類、ObjectOutputStream類。ObjectInputStream類是對(duì)象的反序列化流,它是InputStream類的子類,介紹了它的構(gòu)造方法和方法,通過(guò)一個(gè)例子來(lái)學(xué)習(xí)使用ObjectInputStream類實(shí)現(xiàn)對(duì)象的反序列化。ObjectOutputStream類是是對(duì)象的序列化流,它是OutputStream類的子類,通過(guò)一個(gè)例子來(lái)學(xué)習(xí)使用ObjectOutputStream類實(shí)現(xiàn)對(duì)象的序列化。希望大家通過(guò)本文的學(xué)習(xí),對(duì)你有所幫助!