0

私が書いた非常に単純なプログラムでは、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)

それが役に立ったら、私は多くのスイングオブジェクトを使用していますが、私の調査から、それらはすべてシリアル化可能であると確信しています。

助けてくれてありがとう!

4

2 に答える 2

1

私の最初の質問は、クラスのいずれかから「implements Serializable」を削除すると、NotSerializableException がスローされないことです。なぜだめですか?それらはすべてシリアライズ可能なクラスを拡張していますが、それら自体もシリアライズ可能である必要はありませんか?

基本クラスが の場合、Serializable派生クラスもSerializableです。これは、クラスが を実装することを明示的に指定する必要がないことを意味しますSerializable

于 2012-12-20T01:19:19.943 に答える
1

それらはすべてシリアライズ可能なクラスを拡張していますが、それら自体もシリアライズ可能である必要はありませんか?

いいえ。Serializable は Java の通常のインターフェイスであるため、スーパークラスから継承します。再度宣言する必要はありません。シリアライズ可能なクラスを拡張すると、自動的にシリアライズ可能と見なされます。これは、おそらく Java の設計上の問題です。

于 2012-12-20T01:08:56.167 に答える