2017-10-29 13 views
0

カスタム(シリアライズ可能な)オブジェクトのArrayListをファイルに読み書きしようとしています。 1つのことを除いて、期待どおりに動作しています。ファイルを読むときにEOF例外が発生しています。私のコードは次のとおりです。予期しないEOF例外

ファイルは意図した通りに読み書きされますが、ファイルを読むときにEOF例外が発生します。理由は分かりません。私はwhileループが起こり得ないことを確かめるだろうと思った?

  1. なぜこの例外が発生しますか?
  2. プレーンはシリアル化可能です。代わりにプレーンをparcableに変更した場合、ファイルへの読み書きが可能ですか? (どうやって?)

答えて

0

対応するwriteObjectメソッドによって書き込まれたカスタムデータの境界がOptionalDataExceptionが真のEOFフィールドの値でスローされます超えるオブジェクトデータを読み込むしようとします。割り当てられたデータの終わりを超える非オブジェクトの読み込みは、ストリームの終わりを示すのと同じ方法でデータの終わりを反映します。バイト読み込みは、読み込みバイト数または読み込みバイト数として-1を返し、プリミティブ読み取りによってEOFExceptionsがスローされます。対応するwriteObjectメソッドがない場合、デフォルトのシリアル化されたデータの終わりは、割り当てられたデータの終わりを示します。

これは、私はデータがないときにデータを読み込むための最後の試みが発生したhttps://docs.oracle.com/javase/7/docs/api/java/io/ObjectInputStream.html

で見つけたものです。 whileループ条件は、実際に読み込むデータがあるかどうかをチェックしません。それは無関係にそれを読むことを試みる。

+0

このようなチェックを行うにはどうすればよいですか? –

+0

https://stackoverflow.com/questions/2626163/java-fileinputstream-objectinputstream-reaches-end-of-file-eofこれは役に立ちます – dhani

関連する問題