[英]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.