JavareadObject/writeObject可以save/load超class,那为什么还要read/writeExternal呢?
Java readObject/writeObject can save/load super class, then why need read/writeExternal?
core java volumeII 第二章说,不像readObject/writeObject,readExternal/writeExternal能够保存和恢复数据包括超级class。我刚刚做了一个实验,似乎 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 对象,但它们的方式不同。
在 Serializable Java 的情况下,虚拟机可以完全控制序列化对象,而在 Externalizable 的情况下,应用程序可以控制持久化对象。 writeExternal() 和 readExternal() 方法为应用程序提供了对序列化过程的格式和内容的完全控制,可用于提高序列化过程的性能和速度。
core java volumeII 第二章说,不像readObject/writeObject,readExternal/writeExternal能够保存和恢复数据包括超级class。我刚刚做了一个实验,似乎 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 对象,但它们的方式不同。 在 Serializable Java 的情况下,虚拟机可以完全控制序列化对象,而在 Externalizable 的情况下,应用程序可以控制持久化对象。 writeExternal() 和 readExternal() 方法为应用程序提供了对序列化过程的格式和内容的完全控制,可用于提高序列化过程的性能和速度。