[英]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.