Java 通过ObjectInputStream保存和加载类的Arraylist
我目前正试图通过序列化来保存和加载“Player”类型的类的多个实例。(这是作为供参考的任务) 该进程当前的工作方式是通过ObjectOutputStream.writeObject(Player)运行该类,当我获取包含类数据的文本文件时,这似乎起到了作用 我目前遇到的问题是,当我反转并加载类时,我无法将对象转换回玩家对象,它会抛出一个异常,但是我目前还没有足够的知识来找出确切的异常 请查看以下功能 保存功能:Java 通过ObjectInputStream保存和加载类的Arraylist,java,serialization,arraylist,casting,Java,Serialization,Arraylist,Casting,我目前正试图通过序列化来保存和加载“Player”类型的类的多个实例。(这是作为供参考的任务) 该进程当前的工作方式是通过ObjectOutputStream.writeObject(Player)运行该类,当我获取包含类数据的文本文件时,这似乎起到了作用 我目前遇到的问题是,当我反转并加载类时,我无法将对象转换回玩家对象,它会抛出一个异常,但是我目前还没有足够的知识来找出确切的异常 请查看以下功能 保存功能: public void savePlayers(ArrayList<Playe
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);
}
}
publicsvoidsaveplayers(arraylistp)
{
FileOutputStream fout=null;
ObjectOutputStream oos=null;
尝试
{
fout=新文件输出流(“Player.txt”);
oos=新对象输出流(fout);
对于(玩家:p)
{
oos.writeObject(p);
}
fout.close();
oos.close();
}
捕获(例外e)
{
System.out.println(“错误为:”+e);
}
最后
{
封闭流(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");
}
}
public ArrayList loadPlayers()
{
ArrayList loadedList=新建ArrayList();
文件输入流fis;
目的输入流ois;
尝试
{
fis=新文件输入流(“Player.txt”);
ois=新的ObjectInputStream(fis);
while(true)
{
System.out.println(“进入循环”);//测试
Object obj=ois.readObject();
System.out.println(“读取对象完成”);//测试
玩家p=(玩家)obj;
System.out.println(“Casted player”);//这里的行没有运行,而是从异常打印出错误并退出循环
加载列表。添加(p);
System.out.println(“循环迭代”);
}
}
捕获(EOFEException eof)
{
}
捕获(例外e)
{
System.out.println(“此处例外”);
}
}
有没有更好的方法来保存这些类?我选角的时候做错什么了吗 更改为
oos.writeObject(player);
当您多次编写整个ArrayList时,请更改为
oos.writeObject(player);
在您多次编写整个ArrayList的那一刻为什么不打印实际的错误消息,看看它说了什么?Player是如何定义的?也不要默默咽下例外的叫声!老师打了那个,想看看错误是从哪里来的,我忘了更改它,它附带了:java.io.writeableortedexception:writing aborted;java.io.NotSerializableException:australianopen.GameController。我们必须在这个类中进行搜索,找出发生了什么,Player在它自己的类中定义了什么,它实现了serializable,包含Player的arraylist包含在另一个类中,然后该arraylist通过上述函数传递。为什么不打印实际的错误消息并查看它的内容?Player是如何定义的?也不要默默咽下例外的叫声!老师打了那个,想看看错误是从哪里来的,我忘了更改它,它附带了:java.io.writeableortedexception:writing aborted;java.io.NotSerializableException:australianopen.GameController。我们必须仔细研究这个类,找出在它自己的类中定义了什么,它实现了serializable,包含玩家的arraylist包含在另一个类中,然后arraylist通过函数传递,如上所述。谢谢!我现在没有出现异常或错误,希望我能修复剩下的意大利面,并最终让一些球员上膛!谢谢我现在没有出现异常或错误,希望我能修复剩下的意大利面,并最终让一些球员上膛!