簡體   English   中英

Java readObject / writeObject可以保存/加載超類,那么為什么需要read / writeExternal?

[英]Java readObject/writeObject can save/load super class, then why need read/writeExternal?

核心Java VolumeII第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不能做。

請幫助澄清。 非常感謝。

Serializable和Extenalizable都用於序列化或持久化Java對象,但是它們的方式不同。 如果是可序列化的,則Java虛擬機可以完全控制對象的序列化,而如果是可外部化的,則應用程序可以控制對象的持久化。 writeExternal()和readExternal()方法為應用程序提供了對序列化過程的格式和內容的完全控制,可以用來提高序列化過程的性能和速度。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM