【发布时间】:2017-10-17 02:04:54
【问题描述】:
我目前正在尝试通过序列化保存和加载“播放器”类型的多个实例。 (这是一个作为参考的任务)。
该过程当前的工作方式是我通过 ObjectOutputStream.writeObject(Player) 运行类,这似乎可以工作,因为我得到的文本文件似乎是类数据。
我目前遇到的问题是,当我反转并加载类时,我无法将对象转换回播放器对象,它会引发异常,但是我目前还没有足够的知识来弄清楚确切的例外。
请在下面找到函数。
保存功能:
public void savePlayers(ArrayList<Player> p)
{
FileOutputStream fout = null;
ObjectOutputStream oos = null;
try
{
fout = new FileOutputStream("Player.txt");
oos = new ObjectOutputStream(fout);
for(Player player: p)
{
oos.writeObject(p);
}
fout.close();
oos.close();
}
catch(Exception e)
{
System.out.println("Error is: " + e);
}
finally
{
closeStreams(fout, oos);
}
}
加载函数:
public ArrayList<Player> loadPlayers()
{
ArrayList<Player> loadedList = new ArrayList<Player>();
FileInputStream fis;
ObjectInputStream ois;
try
{
fis = new FileInputStream("Player.txt");
ois = new ObjectInputStream(fis);
while(true)
{
System.out.println("Entered loop"); //testing
Object obj = ois.readObject();
System.out.println("Read object done"); //testing
Player p = (Player)obj;
System.out.println("Casted player"); //The line here doesn't run, prints out error from exception instead and exits loop
loadedList.add(p);
System.out.println("Loop iterated");
}
}
catch(EOFException eof)
{
}
catch(Exception e)
{
System.out.println("Exception here");
}
}
有没有更好的方法来保存课程?铸造时我做错了吗?
【问题讨论】:
-
为什么不打印实际的错误消息并查看它的内容?
-
播放器是如何定义的?也不要默默吞下异常
-
哎呀!老师输入了那个来查看错误来自哪里,我忘了更改它,它带有: java.io.WriteAbortedException: writing aborted; java.io.NotSerializableException:australianopen.GameController。将不得不通过该课程进行搜索并弄清楚发生了什么
-
播放器在自己的类中定义,实现可序列化,包含播放器的arraylist包含在另一个类中,然后通过上述函数传递该arraylist。
标签: java serialization arraylist casting