ObjectInputStream類實現(xiàn)對象的反序列,ObjectOutputStream類實現(xiàn)對象的序列化流
大家好,我是Java進(jìn)階者。
前言
本文主要學(xué)習(xí)ObjectInputStream類實現(xiàn)對象的反序列,ObjectOutputStream類實現(xiàn)對象的序列化流,接下來小編帶大家一起來學(xué)習(xí)!
一、 ObjectInputStream類
1.ObjectInputStream是對象的反序列化流,它是InputStream類的子類。
2.ObjectInputStream類的構(gòu)造方法
public ObjectInputStream(InputStream in):創(chuàng)建指定的輸入流對象讀取ObjectInputStream。參數(shù)in表示指定的輸入流對象。
例子:
- FileInputStream fs=new FileInputStream("test.txt");
- ObjectInputStream os=new ObjectInputStream(fs);
3.使用ObjectInputStream類實現(xiàn)對象的反序列化例子
- import java.io.*;
- class Person implements Serializable{
- // 實現(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)建文件輸入流對象,讀取指定的文件
- FileInputStream fs=new FileInputStream("text/test");
- //創(chuàng)建對象輸入流
- ObjectInputStream os=new ObjectInputStream(fs);
- //讀取Person對象
- Person p=(Person)os.readObject();
- System.out.println("讀取文本的數(shù)據(jù)后顯示:");
- System.out.println("id="+p.getId()+"\tname="+p.getName()+"\tage="+p.getAge());
- }
- }
運行的結(jié)果如下圖所示:
從上面的代碼中因為Person類中屬性的私有的,使用訪問器的方法set和get的方法,當(dāng)調(diào)用ObjectInputStream的readObject()方法把text目錄下的test的Person對象數(shù)據(jù)讀取出來,這個就是反序列化。
二、ObjectOutputStream類
1.ObjectOutputStream是對象的序列化流,它是OutputStream類的子類。
2.ObjectOutputStream類的構(gòu)造方法
public ObjectOutputStream(OutputStream out):創(chuàng)建指定的輸出流對象寫入ObjectOutputStream。參數(shù)out表示指定的輸出流對象。
例子:
- FileOutputStream fs=new FileOutputStream("test.txt");
- ObjectOutputStream os=new ObjectOutputStream(fs);
對象輸出流使用writeObject(Object obj)方法將一個對象obj寫入到一個文件,對象輸入流使用readObject()方法從源中讀取一個對象到程序中。
3.使用ObjectOutputStream類實現(xiàn)對象的序列化例子
- import java.io.FileOutputStream;
- import java.io.IOException;
- import java.io.ObjectOutputStream;
- import java.io.Serializable;
- public class Person implements Serializable{
- // 實現(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)建一個Person對象
- Person p=new Person("C01","進(jìn)階者",18);
- System.out.println("寫入文件前的數(shù)據(jù):");
- System.out.println("id="+p.getId()+"\tname="+p.getName()+"\tage="+p.getAge());
- //創(chuàng)建文件輸出流對象,把數(shù)據(jù)寫入text目錄下的test.txt文件中
- FileOutputStream fs=new FileOutputStream("text/test.txt");
- //創(chuàng)建對象輸出流
- ObjectOutputStream os=new ObjectOutputStream(fs);
- os.writeObject(p);
- }
- }
運行的結(jié)果如下圖所示:
從上面的代碼中,首先是對Person對象進(jìn)行實例化,它的id為c01,name為進(jìn)階者,年齡為18。當(dāng)調(diào)用ObjectOutputStream的writeObject()方法將Person對象寫入text目錄下的test.txt。這就實現(xiàn)了序列化!
三、總結(jié)
本文主要介紹了ObjectInputStream類、ObjectOutputStream類。ObjectInputStream類是對象的反序列化流,它是InputStream類的子類,介紹了它的構(gòu)造方法和方法,通過一個例子來學(xué)習(xí)使用ObjectInputStream類實現(xiàn)對象的反序列化。ObjectOutputStream類是是對象的序列化流,它是OutputStream類的子類,通過一個例子來學(xué)習(xí)使用ObjectOutputStream類實現(xiàn)對象的序列化。希望大家通過本文的學(xué)習(xí),對你有所幫助!