当一个java类实现了Serializable接口时,便自动赋能了几个隐藏方法。
private Object writeReplace() private Object readResolve() private void writeObject(ObjectOutputStream out) private void readObject(ObjectInputStream in)
其语法格式必须如上(访问修饰符可自定义,建议使用private),且定义了以上方法的实体类必须实现Serializable序列化接口!!
若想看到执行效果,可在类中显示地定义这几个方法。
import java.io.*;
/**
* 序列化与反序列化
*/
public class SerializerTest {
public static void main(String[] args) throws IOException, ClassNotFoundException {
User user = new User("流沙");
// 序列化
String userFile = "d:/user";
new ObjectOutputStream(new FileOutputStream(userFile)).writeObject(user);
// 反序列化
ObjectInputStream stream = new ObjectInputStream(new FileInputStream(userFile));
User o = (User) stream.readObject();
System.out.println(o);
}
}
class User implements Serializable {
private final static long serialVersionUID = 1L;
private String name;
public User(String name) {
this.name = name;
}
private Object writeReplace() {
System.out.println(this.getClass().getName() + "调用了 writeReplace()方法");
return this;
}
private Object readResolve() {
System.out.println(this.getClass().getName() + "调用了 readResolve()方法");
return this;
}
private void writeObject(ObjectOutputStream out) throws IOException {
System.out.println(this.getClass().getName() + "调用了 writeObject()方法");
out.defaultWriteObject();
}
private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {
System.out.println(this.getClass().getName() + "调用了 readObject()方法");
in.defaultReadObject();
}
}
序列化->反序列化 执行顺序:writeReplace>writeObject>readObject>readResolve
作用:一般可对一些朱提数据的处理等。自由发挥想象