3

core java volumeII第二章说,不像readObject/writeObject,readExternal/writeExternal可以保存和恢复数据,包括超类。我刚刚做了一个实验,似乎 readObject/writeObject 可以做同样的工作:

class base implements Serializable{
    protected String field = "xyz";
}
class c1 extends base implements Serializable {
    private String name = "name";
    private int age = 12;

    private void readObject(ObjectInputStream ois) {
        System.out.println("readObject!!");
        try {
            field = (String) ois.readObject();
            name = (String) ois.readObject();
            age = ois.readInt();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    private void writeObject(ObjectOutputStream oos) {
        System.out.println("writeObject!!");
        try {
            oos.writeObject(field);
            oos.writeObject(name);
            oos.writeInt(age);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

我的问题是:我们什么时候需要使用 readExternal/writeExternal()?我看不到 readExternal/writeExternal 可以做的任何工作,而 readObject/writeObject 做不到。

请帮助澄清。非常感谢。

4

1 回答 1

3

Serializable 和 Extenalizable 都用于序列化或持久化 java 对象,但它们的方式不同。在 Serializable Java 虚拟机的情况下,可以完全控制序列化对象,而在 Externalizable 的情况下,应用程序可以控制持久化对象。writeExternal() 和 readExternal() 方法为应用程序提供了对序列化过程的格式和内容的完全控制,可用于提高序列化过程的性能和速度。

于 2018-11-24T10:39:08.740 回答