Добрый день!
В документации сказано, что методы writeReplace и readResolve могут использоваться для Serializable и Externalizable. Для Serializable они вызываются, но для Externalizable нет. В чем причина?
public class Person implements Externalizable{
private final long serialVersionUID = 1;
String name;
int age;
Person(){}
Person(String name, int age)
{
this.name = name;
this.age = age;
}
@Override
public String toString()
{
return this.name + " " + this.age;
}
@Override
public void writeExternal(ObjectOutput out) throws IOException
{
out.writeUTF(name);
out.writeInt(age);
}
@Override
public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException
{
this.name = in.readUTF();
this.age = in.readInt();
}
private Object readResolve() throws ObjectStreamException
{
System.out.println("readResolve");
return null;
}
private Object writeReplace() throws ObjectStreamException
{
System.out.println("writeReplace");
return new Person("test",0);
}
}
try(FileOutputStream fos = new FileOutputStream("ser.txt");
ObjectOutputStream oos = new ObjectOutputStream(fos))
{
Person p = new Person("Bob", 18);
p.writeExternal(oos);
}
try(FileInputStream fis = new FileInputStream("ser.txt");
ObjectInputStream ois = new ObjectInputStream(fis))
{
Person p = new Person();
p.readExternal(ois);
System.out.println(p);
}
Все равно выведет: Bob 18