通过ObjectInputStream保存并加载类的Arraylist

通过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"); 
    } 
} 

是否有更好的方法来保存的类?在投射时我做错了什么?

+0

你为什么不打印实际的错误信息,看看它说什么? – alfasin

+0

玩家如何定义?也不要默默吞下例外 –

+0

哎呀!老师输入了这个信息来查看错误来自哪里,我忘了修改它,它带有:java.io.WriteAbortedException:写入中止; java.io.NotSerializableException:australianopen.GameController。 要去冲刷这个类并找出发生了什么 – AidanJH

变化

oos.writeObject(player); 

的那一刻,你的多次写入整个ArrayList中

+0

谢谢!我现在没有得到例外或错误,希望我能修复剩下的意大利面条,并最终让一些玩家加载! – AidanJH