序列化流: ObjectOutputStream
反序列化流: ObjectInputStream
- 序列化:就是把对象通过流的方式存储到文件中
注意:此对象 要重写Serializable 接口才能被序列化
- 反序列化:就是把文件中存储的对象以流的方式还原成对象
一个对象可以被序列化的前提是这个对象对应的类必须实现Serializable接口, 像这样一个接口中如果没有方法,那么这样的接口我们将其称之为标记接口(用来给类打标记的,相当于猪肉身上盖个章)
案例演示:对象序列化和反序列化的基本使用
首先写个Student类,注意要实现序列化接口
import java.io.Serializable;
public class Student implements Serializable {
String name;
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.*;
public class Io01 {
public static void main(String[] args) throws IOException {
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("obj.txt"));
Student stu = new Student("安夜", 16);
oos.writeObject(stu);
oos.close();
}
}
写入成功(不过乱码了,如果有人知道解决方法的话,请留言告诉我,感谢😘)
然后再进行反序列化
import java.io.FileInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
public class Io02 {
public static void main(String[] args) throws IOException, ClassNotFoundException {
ObjectInputStream ois = new ObjectInputStream(new FileInputStream("obj.txt"));
Object obj = ois.readObject();
Student stu = (Student)obj;
System.out.println(stu);
ois.close();
}
}
运行结果