Java IO 讀取類對象的流 ObjectInputStream,ObjectOutputStream 使用教程.

一、讀取類對象的流 ObjectInputStream,ObjectOutputStream 可以將 對象的實例序列化,和反序列化(不懂沒關係看代碼)

二、練習

1.要求:儲存一個實例化的CriminalSuspect 嫌疑人對象 到txt文件,然後讀取出來.

2.分析: 讀取類對象的流 ObjectInputStream,ObjectOutputStream

  • 一、作用 : 對象IO流可以儲存和取出對象的序列,
  • 要求 對象必須實現接口 序列化接口
  • Serializable接口
  • 二、使用方法
  • 1.構造
  • new ObjectOutputStream(FileOutputStream )
  • 2.寫入方法
  • writeObject(new Object),當然你也可以自定義類。

  • 3.新建 new ObjectInputStream(FileOutputStream )
  • 4.讀取數據readObject() 返回爲一個Object對象
  • 三、步驟
  • 1.new ObjectOutputStream(FileOutputStream )
  • 2.寫入數據.writeObject(new Object)
  • 3.刷新關閉
  • 4.新建 new ObjectInputStream(FileOutputStream )
  • 5.讀取數據readObject() 返回爲一個Object對象
  • 6.關閉

3. 嫌疑人的類

CriminalSuspect.java

package Java學習.Java高級.IO.類對象的IO流ObjectInputStream;

import java.io.Serializable;
//Serializable可序列化
public class CriminalSuspect implements Serializable {
    private String name;
    private int age;

    public CriminalSuspect(String name, int age) {
        this.name = name;
        this.age = age;
    }

    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;
    }

    @Override
    public String toString() {
        return "CriminalSuspect{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

4.主類

Main.java

package Java學習.Java高級.IO.類對象的IO流ObjectInputStream;

import java.io.*;

/**
 * 要求:儲存一個實例化的CriminalSuspect 嫌疑人對象 到txt文件,然後讀取出來.
 *
 * 一、作用 : 對象IO流可以儲存和取出對象的序列,
 * 要求 對象必須實現接口 序列化接口》
 * @Serializable
 * 二、使用方法
 * 1.構造
 * new ObjectOutputStream(FileOutputStream )
 * 2.寫入方法
 * writeObject(new Object),當然你也可以自定義類。
 * -------------
 * 3.新建 new ObjectInputStream(FileOutputStream )
 * 4.讀取數據readObject() 返回爲一個Object對象
 * 三、步驟
 * 1.new ObjectOutputStream(FileOutputStream )
 * 2.寫入數據.writeObject(new Object)
 * 3.刷新關閉
 * 4.新建 new ObjectInputStream(FileOutputStream )
 * 5.讀取數據readObject() 返回爲一個Object對象
 * 6.關閉
 */
public class Main {
    public static void main(String[] args) throws IOException, ClassNotFoundException {
        String url = "D:\\Program Files\\JetBrains\\test1\\Lab\\src\\Java學習\\Java高級\\IO\\類對象" +
                "的IO流ObjectInputStream\\";
        //1..new ObjectOutputStream(FileOutputStream )
        ObjectOutputStream objectOutputStream = new ObjectOutputStream(new FileOutputStream(url + "新建的CriminalSuspect嫌疑人實例的序列化.txt"));
        // * 2.寫入數據.writeObject(new Object)
        CriminalSuspect criminalSuspect = new CriminalSuspect("張三", 13);
        objectOutputStream.writeObject(criminalSuspect);
        //3刷新關閉
        objectOutputStream.flush();
        objectOutputStream.close();
        //4.新建 new ObjectInputStream(FileOutputStream )
        ObjectInputStream objectInputStream = new ObjectInputStream(new FileInputStream(url + "新建的CriminalSuspect嫌疑人實例的序列化.txt"));
        //讀取數據readObject() 返回爲一個Object對象
        Object object = objectInputStream.readObject();
        System.out.println(object);
        objectInputStream.close();
    }

}

Run:
CriminalSuspect{name=‘張三’, age=13}

Process finished with exit code 0
在這裏插入圖片描述

三、拓展,在序列化之後還未反序列化之前,修改Person類,會異常

在這裏插入圖片描述

四、練習 在文件中保存多個對象

1.步驟

  • 1.new ArrayList()新建結合
  • 2.在集合中添加對象
  • 3.序列化集合ArrayList
  • 4.反序列化集合並遍歷輸出

2.code

package Java學習.Java高級.IO.類對象的IO流ObjectInputStream.練習序列化集合;

import java.io.*;
import java.util.ArrayList;

/**
* 一、要求:在文件中保存多個對象
* 二、步驟;
* 1.new ArrayList<Person>()新建結合
* 2.在集合中添加對象
* 3.序列化集合ArrayList
* 4.反序列化集合並遍歷輸出
*/
public class Demo {
   public static void main(String[] args) throws IOException, ClassNotFoundException {
       //1.
       ArrayList<Person> personArrayList = new ArrayList<>();
       //2
       personArrayList.add(new Person("張三",13));
       personArrayList.add(new Person("李四",14));
       personArrayList.add(new Person("王五",15));
       //3序列化集合
       String url = "D:\\Program Files\\JetBrains\\test1\\Lab\\src\\Java學習\\Java高級\\IO\\類對象" +
               "的IO流ObjectInputStream\\練習序列化集合\\集合的序列化.txt";
       ObjectOutputStream objectOutputStream = new ObjectOutputStream(new FileOutputStream(url));
       objectOutputStream.writeObject(personArrayList);
       objectOutputStream.flush();
       objectOutputStream.close();
       //4.反序列化
       ObjectInputStream objectInputStream = new ObjectInputStream(new FileInputStream(url));
       Object object = objectInputStream.readObject();
       System.out.println("反序列化的對象object: "+object);
       System.out.println("強轉然後遍歷輸出結果:");
       personArrayList = (ArrayList<Person>)object;
       for (Person person : personArrayList) {
           System.out.println(person);
       }
   }
}

Run:
反序列化的對象object: [Person{name=‘張三’, age=13}, Person{name=‘李四’, age=14}, Person{name=‘王五’, age=15}]
強轉然後遍歷輸出結果:
Person{name=‘張三’, age=13}
Person{name=‘李四’, age=14}
Person{name=‘王五’, age=15}

Process finished with exit code 0
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章