簡體   English   中英

Java Object Streams和java.io.EOFException

[英]Java Object Streams and java.io.EOFException

在我編寫的一個相當簡單的程序中,我使用ObjectOutputStream保存一個對象(包含一些其他對象的游戲)。 我的第一個問題是,當我從任何類中刪除“implements Serializable”時,不會拋出NotSerializableException。 為什么不? 它們都擴展了Serializable類,但它們本身也不應該是Serializable類嗎?

我可能有的另一個問題是,當我重新讀取對象時,我得到一個java.io.EOFException。

我不明白為什么會發生這兩件事。 我使用相同的文件名進行讀寫。 為什么在文件結束之前它會到達文件的末尾?

這是編寫代碼:

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();中拋出異常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)

如果有幫助,我會使用很多擺動物體,但從我的研究中,我很確定它們都是可序列化的。

謝謝您的幫助!

它們都擴展了Serializable類,但它們本身也不應該是Serializable類嗎?

不可以.Serializable是Java中的普通接口,因此您可以從超類繼承它,無需再次聲明它。 如果擴展可序列化類,則自動被視為可序列化。 這可以說是Java中的一個設計問題。

我的第一個問題是,當我從任何類中刪除“implements Serializable”時,不會拋出NotSerializableException。 為什么不? 它們都擴展了Serializable類,但它們本身也不應該是Serializable類嗎?

如果基類是Serializable ,那么派生類也是Serializable 這意味着您無需明確指定您的類實現Serializable

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM