一、讀取類對象的流 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