对象反序列化流
对象序列化:就是将对象保存到磁盘中,或者在网络中传输对象 这种机制就是使用一个字节序列表示一个对象,该字节序列包含:对象的类型、对象的数据和对象中存储的属性等信息 字节序列写到文件之后,相当于文件中持久保存了一个对象的信息
反之,该字节序列还可以从文件中读取回来,重构对象,对它进行反序列化
要实现序列化和反序列化就要使用对象序列化流和对象反序列化流: 1、对象序列化流:ObjectOutputStream 2、对象反序列化流:ObjectInputStream
对象反序列化流:ObjectInputStream
该类在java.io包下。该类的父类是InputStream类,即该类是字节输入流。该类是具体类实现类两个接口ObjectInput、ObjectStreamConstants
通过ObjectOutputStream类写到文件的数据,再通过ObjectInputStream是可以读取到文件里面的数据
该类的构造方法,如下
构造方法 | 作用 |
---|---|
ObjectInputStream(InputStream in) | 创建一个从指定的InputStream读取的ObjectInputStream |
该类的方法,如下
方法 | 作用 |
---|---|
readObject() | 从ObjectInputStream中读取一个对象。该方法的返回值类型是object对象类型 |
对象反序列化流的练习
xxxxxxxxxx
package ch20;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
//相当于是读文件,把乱码重新读成我们看得懂的数据。读文件直接在控制台就能看到结果
public class a_11_1测试 {
public static void main(String[] args) throws IOException, ClassNotFoundException {
//通过构造方法创建反序列化流的对象 ObjectInputStream(InputStream in) 创建一个从指定的InputStream读取的ObjectInputStream
ObjectInputStream ois = new ObjectInputStream(new FileInputStream("D:\\huanf\\java\\src\\ch18_ch19_储物区\\oos.txt"));
//上面的oos.txt在上一节课是乱码的,我们要变成不是乱码的,即通过反序列化流读里面的字节序列,读成我们看得懂的
//拿到上一节课序列化的对象
Object obj = ois.readObject(); //readObject报红线,抛出异常即可
//因为该对象是学生类,我们要先把该对象向下转型
a_10_2Student s = (a_10_2Student) obj;
System.out.println(s.getName() + "," + s.getAge());
//凡是使用流,就必须释放资源
ois.close();
}
}