Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 通过ObjectInputStream保存和加载类的Arraylist_Java_Serialization_Arraylist_Casting - Fatal编程技术网

Java 通过ObjectInputStream保存和加载类的Arraylist

Java 通过ObjectInputStream保存和加载类的Arraylist,java,serialization,arraylist,casting,Java,Serialization,Arraylist,Casting,我目前正试图通过序列化来保存和加载“Player”类型的类的多个实例。(这是作为供参考的任务) 该进程当前的工作方式是通过ObjectOutputStream.writeObject(Player)运行该类,当我获取包含类数据的文本文件时,这似乎起到了作用 我目前遇到的问题是,当我反转并加载类时,我无法将对象转换回玩家对象,它会抛出一个异常,但是我目前还没有足够的知识来找出确切的异常 请查看以下功能 保存功能: public void savePlayers(ArrayList<Playe

我目前正试图通过序列化来保存和加载“Player”类型的类的多个实例。(这是作为供参考的任务)

该进程当前的工作方式是通过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);
    }

}
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通过函数传递,如上所述。谢谢!我现在没有出现异常或错误,希望我能修复剩下的意大利面,并最终让一些球员上膛!谢谢我现在没有出现异常或错误,希望我能修复剩下的意大利面,并最终让一些球员上膛!