自己实现序列化和反序列化的过程
这个问题是我在进行单例模式学习的过程中遇到的,
如果实现了序列化接口, 还要做什么来防止反序列化破坏单例?
答:实现readResolve方法,直接将对象返回。因为如果已经实现了readResolve方法,反系列化后就会直接使用readResolve的返回值
由此引出以下问题:
在进行系列化和反序列化时是如何找到并运行自己实现的writeObject()和readObject()方法的?
public class Test1 {
public static void main(String[] args) throws IOException, ClassNotFoundException, InterruptedException {
FileOutputStream fos = new FileOutputStream("D:\\out.txt");
ObjectOutputStream oos = new ObjectOutputStream(fos);
Person p = new Person();
p.name = "LZF";
p.age = 19;
oos.writeObject(p);
oos.close();
Thread.sleep(1000);
File f = new File("D:\\out.txt");
FileInputStream inputStream = new FileInputStream(f);//创建文件字节输出流对象
ObjectInputStream objectInputStream = new ObjectInputStream(inputStream);
Person person = (Person)objectInputStream.readObject();
System.out.println(person);
}
}
class Person implements Serializable {
private static final long serialVersionUID = 1386583756403881124L;
String name;
int age;
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
private void writeObject(ObjectOutputStream out) throws IOException {
System.out.println("My writeObject");
}
private void readObject(ObjectInputStream in) throws IOE