2017-10-18 49 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

例外が発生しなくなるまでキャッチブロックに入ることはありません – Russiancold

+0

なぜループを脱落する必要がありますか?たぶんあなたがしようとしていることを達成するためのより良い方法があります。 –

+0

例外を追加しようとしましたが、出力は変わりません。私はwhileループの後にどんな動きもしないので、まっすぐEOFExceptionに行きます。 –

答えて

1

これは、この質問の重複です:

Java FileInputStream ObjectInputStream reaches end of file EOF

ボトムラインは、それがストリームの終わりに達したときのObjectInputStreamがnullを返さないということです。代わりに、基礎となるFileInputStreamはEOFExceptionをスローします。これをファイルの終わりと解釈することはできますが、切り詰めたファイルを区別することはできません。だから、現実的に言えば、ObjectInputStreamのは、あなたがあなたが読んされますどのように多くのオブジェクトを知っていると予想している。

これを回避するには、あなたが多くUserRegistrationオブジェクトがファイルであるかを示すファイルの先頭に整数を書くことができます。その値を読み取り、forループを使用してその多くのオブジェクトを読み取ります。

また、配列やその他のコンテナとしてUserRegistrationオブジェクトをシリアル化し、配列/コンテナ全体を逆シリアル化することができます。

関連する問題