我目前正在尝试通过序列化来保存和加载“Player”类的多个实例。 (这是作为fyi的作业)。
当前进程的工作方式是我通过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");
}
}
有没有更好的方法来保存课程?我在演员时做错了什么?
答案 0 :(得分:2)
更改为
oos.writeObject(player);
以及您多次编写整个ArrayList的时刻