对象序列化以及反序列化
1.序列化
所谓的序列化就是把在内存中的对象存到文件里面
将一个对象序列化有几个步骤:
1.new一个类的对象,就是你需要序列化的对象,这个类需要实现Serializable接口,Serializable接口没有方法和属性,是标记接口
2.需要一个文件输出流,因为序列化后的对象需要一个文件存储
3.使用文件输出流构造对象输出流(就是new一个ObjectOutputStream对象,new的时候需要需要传入一个FileOutputStream对象)
4.调用ObjectOutputStream对象的writeObject方法,将对象作为参数传入该方法
2.反序列化
反序列化就是把文件中的对象加载到内存中
反序列化就是序列化的反向操作,用到对象输入流(ObjectInputStream)和文件输入流(用于创建对象输入流对象)
实例代码如下:
public static void objectOutputStream(String path) throws IOException {
//序列化
Person person1 = new Person("AWNG",19);
Person person2 = new Person("ssss",12);
FileOutputStream fileWriter = new FileOutputStream(path);
ObjectOutputStream objectOutputStream = new ObjectOutputStream(fileWriter);
objectOutputStream.writeObject(person1);
objectOutputStream.writeObject(person2);
objectOutputStream.close();
}
public static void objectInputStream(String path) throws IOException, ClassNotFoundException {
//反序列化
FileInputStream fileInputStream = new FileInputStream(path);
ObjectInputStream objectInputStream = new ObjectInputStream(fileInputStream);
//需要注意readObject返回的是Object类型
Object object = objectInputStream.readObject();
Object object2 = objectInputStream.readObject();
Person person1 = (Person) object;
Person person2 = (Person) object2;
System.out.println(person1);
System.out.println(person2);
}
与读写文件内容时类似,每读一次返回一个对象,读完了再读就会报EOFException异常,在不确定文件中有几个序列化对象的情况下建议将对象存入一个集合中,再将这个集合对象序列化,反序列化时只取出该集合对象再从集合中取出需要的对象
Person类:
import java.io.Serializable;
/*
@author Nian
@Date 2022/8/6 16:04
@purpose
@Note
*/
public class Person implements Serializable {
private String name;
private int age;
public Person() {
}
public Person(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 "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}