一、读取类对象的流 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