私が書いた非常に単純なプログラムでは、ObjectOutputStreamを使用してオブジェクト(他のいくつかのオブジェクトを含むゲーム)を保存しています。私の最初の質問は、クラスのいずれかから「implements Serializable」を削除すると、NotSerializableExceptionがスローされないことです。なぜだめですか?それらはすべてSerializableクラスを拡張していますが、それら自体もSerializableである必要はありませんか?
私が抱えているもう1つの問題は、関連している可能性がありますが、オブジェクトを読み戻すと、java.io.EOFExceptionが発生することです。
これらの2つのことが起こっている理由がわかりません。読み取りと書き込みの両方に同じ正確なファイル名を使用します。完了する前にファイルの最後に到達するのはなぜですか?
書き込みコードは次のとおりです。
public void actionPerformed(ActionEvent event)
{
try
{
saver.writeObject(game);
saver.close();
} catch (IOException e)
{
e.printStackTrace();
}
dispose();
}
そして、ここに読書コードがあります:
File file = new File("savedgame.dat");
if (file.exists())
{
try
{
loader = new ObjectInputStream(new FileInputStream(file));
game = (GameBoard) loader.readObject();
loader.close();
}
catch (EOFException ex)
{
ex.printStackTrace();
}
}
else
{
game = new GameBoard();
}
例外がgame = (GameBoard) loader.readObject();
回線にスローされています。
スタックトレースは次のとおりです。
java.io.EOFException
at java.io.ObjectInputStream$BlockDataInputStream.peekByte(Unknown Source)
at java.io.ObjectInputStream.readObject0(Unknown Source)
at java.io.ObjectInputStream.readObject(Unknown Source)
それが役に立ったら、私は多くのスイングオブジェクトを使用していますが、私の調査から、それらはすべてシリアル化可能であると確信しています。
助けてくれてありがとう!