gpt4 book ai didi

Java readObject/writeObject 可以保存/加载父类(super class),那为什么需要read/writeExternal?

转载 作者:行者123 更新时间:2023-11-30 07:43:25 24 4
gpt4 key购买 nike

core java volumeII chapter II说,不像readObject/writeObject,readExternal/writeExternal可以保存和恢复数据,包括父类(super 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() 方法为应用程序提供了对序列化过程的格式和内容的完全控制,可以用来提高序列化过程的性能和速度。

关于Java readObject/writeObject 可以保存/加载父类(super class),那为什么需要read/writeExternal?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53457216/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com