有一种彻底的自定义序列化机制,可以在序列化对象时将该对象替换成其它对象。
public class Person implements Serializable {
private String name;
private int age;
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
private Object writeReplace(){
ArrayList<Object> list = new ArrayList<Object>();
list.add(name);
list.add(age);
return list;
}
}上面的代码重写了writeReplace()方法,Java的序列化机制保证在序列化时先调用该对象的writeReplace方法,如果该方法返回的是另外一个Java对象,则序列化另一个对象。参考下列代码。
public class ReplaceTest {
public static void main(String[] args) {
try (ObjectOutputStream oos = new ObjectOutputStream(
new FileOutputStream("test.txt"));
ObjectInputStream ois = new ObjectInputStream(
new FileInputStream("test.txt"))) {
Person per = new Person("w", 18);
oos.writeObject(per);
ArrayList list = (ArrayList) ois.readObject();
System.out.println(list);
} catch (Exception e) {
e.printStackTrace();
}
}
}
京公网安备 11010502036488号