Java readObject / writeObject может сохранять / загружать суперкласс, тогда зачем нужно read / writeExternal? - PullRequest
0 голосов
/ 24 ноября 2018

core java том II, глава II говорит, что в отличие от 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 не смогла.

Пожалуйста, помогите уточнить.Большое спасибо.

1 Ответ

0 голосов
/ 24 ноября 2018

И Serializable, и Extenalizable используются для сериализации или сохранения Java-объектов, но способ, которым они это делают, отличается.В случае Serializable Java Virtual machine имеет полный контроль над сериализацией объекта, в то время как в случае Externalizable приложение получает контроль над сохраняющимися объектами.Методы writeExternal () и readExternal () обеспечивают полный контроль над форматом и содержимым процесса сериализации для приложения, которые можно использовать для повышения производительности и скорости процесса сериализации.

...