Externalizable 接口的反序列化过程取决于传递的构造函数,我们显式创建它的对象,但在 Serializable 接口的情况下,对象由 ObjectStreamClass.newInstance() 创建。所以这里没有构造函数的作用。
之后,它在内部存储与传递的 inputStream 对象链接的数据/对象数组(任何自定义字段、字符串、int ...等)。所有数组元素(存储对象的状态)稍后设置到对象中,并将返回系统。
另外我想通知您,在 Externalizable 的情况下,没有强制使用无参数构造函数。我们可以通过在构造函数初始化期间将所有参数传递为 null 来创建对象,这样可以正常工作。
ExternalizablePair1 copyOfPair = new ExternalizablePair1(null,null,null);
FileInputStream inputStream = new FileInputStream(OUTPUT_FILE);
ObjectInputStream objectInputStream = new ObjectInputStream(inputStream);
copyOfPair.readExternal(objectInputStream);
@Override
public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
this.key = in.readUTF();
this.value = in.readUTF();
this.emp = (Employee) in.readObject();
}