java - 如何反序列化对象?

标签 java serialization

我有一个名为 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/

相关文章:

c# - 将 C# 枚举定义序列化为 Json

java - 如何在按下键盘按键时改变不同 Jbutton 的焦点?

java 继承多态方法 地下城怪物游戏

java - 按自定义预定义顺序重新排列 HashMap 键

c# - 命名数组中的每个元素

java - java中反序列化对象

java - Spark 和不可序列化的 DateTimeFormatter

java - 基本帮助 数组和链表

Java:当记录存在时=继续向记录末尾添加数字

django - 在 Django Rest Framework 中设置 slug 和用户时创建模型