how to deserialize object?

情到浓时终转凉″ 提交于 2019-12-23 17:09:21

问题


I have a class called Flight The Flight class when instantiated, instantiates another class called SeatingChart, and SeatingChart also instantiates another class and so on and so forth.

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;
    }
}

I have another method in another class that deserializes the object saved in the disk

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();
        }   
    }

my question is when I assign sw101 the serialized object, everything sw101 instantiated in the beginning like the SeatingChart sc object also get whatever is saved in the file without me doing anything as long as those objects all implement the Serializable interface? If so why is my code not working? what am I doing wrong?


回答1:


It looks like you're trying to return through a reference parameter (C/C++ background?)

That never works in Java. All parameters (including references) are passed by value. Once you do

sw101=null;

you lose the reference to the object that was passed in.

Your deserialize function should return the flight object instead.

(Technically there is a way to simulate returning through the arguments in Java by using an array, but it leads to unnecessarily complicated code)




回答2:


In java, all parameters are passed as values.. so the answer to your last question is no. sw101 is a reference to a copy.

As said, you have to return your deserialized object to make it work.

check this article: parameter passing in java



来源:https://stackoverflow.com/questions/6379912/how-to-deserialize-object

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!