gpt4 book ai didi

Java 对象流和 java.io.EOFException

转载 作者:行者123 更新时间:2023-12-02 07:22:55 25 4
gpt4 key购买 nike

在我编写的一个相当简单的程序中,我使用 ObjectOutputStream 保存一个对象(一个包含一些其他对象的游戏)。我的第一个问题是,当我从任何类中删除“实现可序列化”时,不会引发 NotSerializedException 。为什么不?它们都扩展了可序列化类,但它们本身不也必须是可序列化的吗?

我遇到的另一个可能相关的问题是,当我读回对象时,我得到一个 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(); 行引发异常。

这是堆栈跟踪:

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)

如果有帮助的话,我正在使用许多 swing 对象,但根据我的研究,我很确定它们都是可序列化的。

感谢您的帮助!

最佳答案

They are all extending Serializable classes, but shouldn't they themselves have to be Serializable as well?

没有。 Serialized 是 Java 中的一个普通接口(interface),因此您可以从父类(super class)继承它,无需再次声明它。如果您扩展可序列化的类,您将自动被视为可序列化。这可以说是 Java 中的一个设计问题。

关于Java 对象流和 java.io.EOFException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13963789/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com