gpt4 book ai didi

java - `private void readObject(ObjectInputStream stream)`如何在Java中自定义序列化返回一个对象?

转载 作者:行者123 更新时间:2023-12-04 07:14:00 24 4
gpt4 key购买 nike

我正在阅读 custom serialization在 Java 中,您在要序列化的类中提供以下两个方法:

private void writeObject(ObjectOutputStream oos)
private void readObject(ObjectInputStream ois)

例如:

public class Employee implements Serializable {
private static final long serialVersionUID = 1L;
private transient Address address;
private Person person;

// setters and getters

private void writeObject(ObjectOutputStream oos)
throws IOException {
oos.defaultWriteObject();
oos.writeObject(address.getHouseNumber());
}

private void readObject(ObjectInputStream ois)
throws ClassNotFoundException, IOException {
ois.defaultReadObject();
Integer houseNumber = (Integer) ois.readObject();
Address a = new Address();
a.setHouseNumber(houseNumber);
this.setAddress(a);
}
}

当你想反序列化Employee类的序列化对象时,如下所示:

Employee e2 = (Employee) objectInputStream.readObject();

Java 虚拟机将调用 Employee 类中定义的 readObject(ObjectInputStream ois) 方法,而不是 readObject() ObjectInputStream 类 ( source )。但是,前一个方法不返回任何内容 (void),这与后一个返回 Object 类型(应该被强制转换)的方法不同。

那么,我们如何仍然从上述自定义反序列化过程中获取Employee 对象?

最佳答案

你不会因为这个方法得到任何额外的对象 - readObject 方法不是静态的,要运行它你需要有实例(比如 Employee 类)和 - 这是你的对象。

看看例子from this tutorial - 你在那里做的实际上是设置这个对象的字段

private void readObject(ObjectInputStream aInputStream) throws ClassNotFoundException, IOException 
{
firstName = aInputStream.readUTF();
lastName = aInputStream.readUTF();
accountNumber = aInputStream.readInt();
dateOpened = new Date(aInputStream.readLong());
}

关于java - `private void readObject(ObjectInputStream stream)`如何在Java中自定义序列化返回一个对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68894757/

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