有一种彻底的自定义序列化机制,可以在序列化对象时将该对象替换成其它对象。
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(); } } }