1.1 对象序列化和反序列化概述:
- 序列化流的作用:
- 可以直接将对象保存到文件中
- 可以直接从文件中读取对象
- 序列化流的分类:
- ObjectOutputStream:对象输出流
- ObjectInputStream:对象输入流
- 对象的序列化:
- 将对象以流的形式保存到文件中的过程称为对象的序列化。
- 实现对象序列化操作需要使用对象输出流:ObjectOutputStream
- 对象序列化注意事项:
- 对象序列化操作只会保存对象相关的数据,属于类的数据不会被保存,因为static修饰的成员变量是属于类的,所以在保存对象时静态成员变量的值不会被保存。
1.2 ObjectOutputStream类:
- ObjectOutputStream类构造方法:
- ObjectOutputStream(OutputStream out):根据字节输出流创建对象输出流对象。
- ObjectOutputStream类成员方法:
- void writeObject(Object obj):保存对象到流关联的文件中。
public class Student {
private String name;
private int age;
public Student() {
}
public Student(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 "Student{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.ObjectOutputStream;
public class ObjectOutputStreamDemo01 {
public static void main(String[] args) throws Exception {
//创建学生对象
Student stu = new Student("马云",18);
//创建对象输出流对象
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("H:/stu.txt"));
//将对象保存到流关联的目标文件中
oos.writeObject(stu);
//关闭流释放资源
oos.close();
}
}
错误原因:java.io.NotSerializableException 对象不支持序列化操作
Serializable接口概述:
- 是一个标记性接口,只要实现了该接口就具备序列化能力。
- 只有实现了该接口的类的对象才可以通过输出流保存到文件中。
解决方案:实现Serializable接口
2.1 反序列化:
一旦类实现了Serializable接口,每当类重新编译系统都会为类随机生成一个序列号
序列号是一个长整型的数据。
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.ObjectInputStream;
public class ObjectInputStreamDemo01 {
public static void main(String[] args) throws Exception {
//创建对象输入流对象
ObjectInputStream ois = new ObjectInputStream(new FileInputStream("H:/stu.txt"));
//读取对象数据
Student stu = (Student) ois.readObject();
System.out.println(stu);
//关闭流
ois.close();
}
}
未完,待续......
扫描二维码关注公众号,回复:
2756756 查看本文章