java - 为什么我在反序列化保存的对象时遇到 EOF 异常

标签 java serialization deserialization

我正在尝试序列化然后反序列化多个对象。我可以毫无问题地写入文件,但在选择反序列化选项时会得到以下堆栈跟踪。以前我可以成功序列化和反序列化一个对象。

dos 中的堆栈跟踪是:

java.io.EOFException
        at java.io.ObjectInputStream$BlockDataInputStream.peekByte(Unknown Sourc
e)
        at java.io.ObjectInputStream.readObject0(Unknown Source)
        at java.io.ObjectInputStream.readObject(Unknown Source)
        at mainmenutest.DeserializeDemo.Deserialize(DeserializeDemo.java:23)
        at mainmenutest.MainmenuTest.getInput(MainmenuTest.java:64)
        at mainmenutest.MainmenuTest.main(MainmenuTest.java:26)

我的反序列化代码如下:

package mainmenutest;

/**
 *
 * @author Darren Estcourt
 */
import java.io.*;
public class DeserializeDemo
{
   public void Deserialize()
   {
      ClubInfo club = null;
      ClubInfo club2 = null;
      try
      {
         FileInputStream fileIn = new FileInputStream("C:/tmp/club.ser");
         ObjectInputStream in = new ObjectInputStream(fileIn);
         club = (ClubInfo) in.readObject();
         club2 = (ClubInfo) in.readObject();
         in.close();
         fileIn.close();
      }catch(IOException i)
      {
         i.printStackTrace();
         return;
      }catch(ClassNotFoundException c)
      {
         System.out.println("Club class not found");
         c.printStackTrace();
         return;
      }
      System.out.println("Saved game loaded...");
      System.out.println("Name: " + club.teamName);
      System.out.println("Stadium: " + club.stadium);
      System.out.println("Division: " + club.division);
     // System.out.println("SSN: " + club.SSN);
      System.out.println("Stadium Capacity: " + club.stadiumCapacity);
      System.out.println("Name : " + club2.teamName);

    }
}

我不想有人帮我解决这个问题,只是给我一个指向正确方向的指针。我计划最终反序列化大约 20 个对象。

最佳答案

当没有更多对象可供读取时,或者当流因其他原因意外到达末尾时(零长度、被截断、关闭时未正确刷新),会抛出

EOFException )。

在本例中,异常是由 readObject() 引发的,因此仅第一个适用。看起来您要么没有序列化任何对象并尝试读取一个对象,要么序列化了一个对象并尝试读取两个对象。

关于java - 为什么我在反序列化保存的对象时遇到 EOF 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32554603/

相关文章:

java - 是否建议保持 Java 序列化 UID 唯一?如果我为所有 Java 类提供相同的序列化 UID =1 会发生什么

c# - 为什么当我使用 JSON.NET 反序列化时会忽略我的默认值?

java - hadoop mapreduce Mapper 从文本文件中读取不正确的值

java - 杀死一个挂起的线程

java - 使用带有自定义类的嵌套 HashMap 进行 Kryo 序列化

c - 反序列化错误

java - 调用方法的对象的技术名称

java - Spring bean定义文件 "cannot be opened because it does not exist"

python - 在将字符串用作 json 对象之前转义字符串的正确方法是什么

java - 包含 ArrayList 的反序列化对象具有所有空值