gpt4 book ai didi

java - 如何反序列化对象?

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:37:32 25 4
gpt4 key购买 nike

我有一个名为 Flight 的类 Flight 类在实例化时会实例化另一个名为 SeatingChart 的类,而 SeatingChart 还会实例化另一个类,依此类推。

public class Flight implements Serializable
{

SeatingChart sc = new SeatingChart(); seating
//WaitingList wl = new WaitingList();
}

public class SeatingChart extends ListAndChart implements PassengerList, Serializable
{
public static final int NOT_FOUND = 42;

Passenger [] pass = new Passenger[40];
}

public class Passenger implements Serializable
{

private String firstName, lastName, fullName;

public String getName()
{
fullName = firstName + " " + lastName;
return fullName;
}
public void setFirstName(String firstName)
{
this.firstName = firstName;
}
public void setLastName(String lastName)
{
this.lastName = lastName;
}
}

我在另一个类中有另一个方法反序列化保存在磁盘中的对象

public void actionPerformed(ActionEvent evt)
{
Serialization.deserialize(sw101); <--- sw101 is a Flight object
.
.
.
}

//code for deserialization
public static void deserialize(Flight sw101)
{
String filename = "serialized.ser";

sw101 = null;

FileInputStream fis = null;
ObjectInputStream in = null;

try
{
fis = new FileInputStream(filename);
in = new ObjectInputStream(fis);
sw101 = (Flight)in.readObject();
System.out.println("sw101" + sw101.toString());
in.close();
}
catch(IOException ex)
{
ex.printStackTrace();
}
catch(ClassNotFoundException ex)
{
ex.printStackTrace();
}
}

我的问题是,当我将序列化对象分配给 sw101 时,在开始时实例化的所有 sw101 对象(如 SeatingChart sc 对象)也会获得文件中保存的任何内容,只要这些对象都实现了 Serializable 接口(interface),我不需要做任何事情吗?如果是这样,为什么我的代码不起作用?我做错了什么?

最佳答案

看起来你正试图通过引用参数返回(C/C++ 背景?)

这在 Java 中行不通。所有参数(包括引用)均按值传递。一旦你这样做了

sw101=null;

您丢失了对传入对象的引用。

您的反序列化函数应该返回航类对象。

(技术上有一种方法可以通过使用数组在 Java 中模拟通过参数返回,但它会导致不必要的复杂代码)

关于java - 如何反序列化对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6379912/

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