2017-10-18 47 views
0

這裏輟學是我的代碼有:JAVA的ObjectInputStream不能從環

ObjectInputStream ois = null; 
    UserRegistration UR = new UserRegistration(); 



    Scanner pause = new Scanner(System.in); 
    Admin go = new Admin(); 
    try { 

     //ItemEntry book = new ItemEntry(); 
     ois = new ObjectInputStream(new FileInputStream("Account.txt")); 
     while ((UR = (UserRegistration) ois.readObject()) != null) { 
      //if (book.getName().equals("1")) 
      { 
       System.out.println(UR); 
      } 
     } 

    } catch (EOFException e) { 
     System.out.println("\nEnd**"); 

    }catch (ClassNotFoundException ex) { 
     System.out.println(ex.getMessage()); 
    } catch (IOException e) { 
     System.out.println(e.getMessage()); 
    } finally { 
     try { 
      ois.close(); 
      System.out.println("Press \"ENTER\" to continue..."); 
      pause.nextLine(); 
      go.startup(); 
     } catch (Exception ex) { 
      System.out.println(ex.getMessage()); 
     } 
    } 
} 

我怎樣才能使它從環退出,而不是直接進入到EOFException類,當它到達的最後一個對象?請幫助 !

+0

在沒有任何異常之前,您不會進入catch塊。 – Russiancold

+0

爲什麼您需要退出循環?也許有更好的方法來完成你想要的東西。 –

+0

我試過添加異常,但輸出仍然保持不變。我不能在while循環之後做任何動作,導致它直接進入EOFException。 –

回答

1

這是這個問題的一個副本:

Java FileInputStream ObjectInputStream reaches end of file EOF

底線是,當它到達流的末尾ObjectInputStream中沒有返回null。相反,基礎FileInputStream拋出一個EOFException。雖然您可以將其解釋爲文件的結尾,但它不允許您區分截斷的文件。因此,實際而言,ObjectInputStream的希望你知道有多少對象,你會被讀取。

要解決這個問題,你可以到文件的開頭表明許多放在userRegistration對象如何在文件中的整數。讀取該值,然後使用for循環讀取多個對象。

或者,您可以將您的UserRegistration對象序列化爲數組或其他容器,然後對整個數組/容器進行反序列化。

相關問題