通过ObjectInputStream保存并加载类的Arraylist
问题描述:
我目前正试图通过序列化来保存和加载类型为“Player”的类的多个实例。 (这是作为一个任务)。通过ObjectInputStream保存并加载类的Arraylist
当前进程的工作方式是我通过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");
}
}
是否有更好的方法来保存的类?在投射时我做错了什么?
答
变化
oos.writeObject(player);
的那一刻,你的多次写入整个ArrayList中
+0
谢谢!我现在没有得到例外或错误,希望我能修复剩下的意大利面条,并最终让一些玩家加载! – AidanJH
你为什么不打印实际的错误信息,看看它说什么? – alfasin
玩家如何定义?也不要默默吞下例外 –
哎呀!老师输入了这个信息来查看错误来自哪里,我忘了修改它,它带有:java.io.WriteAbortedException:写入中止; java.io.NotSerializableException:australianopen.GameController。 要去冲刷这个类并找出发生了什么 – AidanJH