【发布时间】:2017-03-14 05:50:31
【问题描述】:
我正在向我的数据库项目添加序列化,但我在理解如何反序列化我的链表时遇到了问题。我认为我正确地对其进行了序列化,但我想对我的实现进行反馈,而且我不完全确定这是正确的方法。
我的自定义链表类报名:
/*
class which is used to create the
enrollment linked list referencing
Student and Course objects
*/
public class Enrollment implements Serializable
{
private Student student;
private Course course;
private Enrollment link;
public Enrollment(Student student, Course course)
{
this.student = student;
this.course = course;
this.link = null;
}
//returns student object to caller
public Student getStudent()
{
return student;
}
//sets student field
public void setStudent(Student student)
{
this.student = student;
}
//returns course object to caller
public Course getCourse()
{
return course;
}
//sets course field
public void setCourse(Course course)
{
this.course = course;
}
//returns link to caller
public Enrollment getLink()
{
return link;
}
//sets link field
public void setLink(Enrollment link)
{
this.link = link;
}
}//end Enrollment
对于序列化,我有一个指向列表前面的对象引用,称为allEnrollment。我认为仅序列化此引用不会序列化整个列表,而只会序列化第一个节点。这是我序列化链表的方法(如果不应该这样做,请纠正我):
void saveEnrollment(String filename) throws IOException
{
ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(filename));
Enrollment currNode = allEnrollment;
//iterating thru linked list and writing each object to file
while (currNode != null)
{
out.writeObject(currNode);
currNode = currNode.getLink();
}
out.close();
}
假设我的saveEnrollment 方法对于序列化是正确的,我将如何正确地反序列化这个链表?我挣扎得很厉害,可以使用一些建议。我所做的所有阅读都让我更加困惑。 Enrollment 的所有成员都执行Serializable,所以我应该在那里很好。提前致谢。
编辑:
这是我从下面的好建议中添加的反序列化方法,以防其他人希望看到它以供将来参考:
void loadEnrollment(String filename) throws ClassNotFoundException, IOException
{
ObjectInputStream in = new ObjectInputStream(new FileInputStream(filename));
allEnrollment = (Enrollment)in.readObject();
}
【问题讨论】:
标签: java serialization linked-list deserialization