java - ObjectInputStream 抛出 EOFException

标签 java file file-io filereader serializable

我正在编写一个类来跟踪锦标赛的比赛数据。我想将此类存储到文件中,因此我使用了 ObjectInputStream。我正在编写的类实现了 Serializable。我遇到了一个 EOFException,而我在 SO 和其他地方找到的解决方案都没有真正解决这个问题。

我的文件编写器是:

public void writeToFile(String path) {
    File f = new File(path);
    if(f.exists()) f.delete();

    try {
        OutputStream fileOut = new FileOutputStream(path);
        OutputStream bufferOut = new BufferedOutputStream(fileOut);
        ObjectOutput output = new ObjectOutputStream(bufferOut);

        output.writeObject(this);
    } catch(IOException e) {}
}

我的文件阅读器是:

public static DivisionDataFTC readFromFile(String path) {
    try {
        InputStream fileIn = new FileInputStream(path);
        InputStream bufferIn = new BufferedInputStream(fileIn);
        ObjectInput input = new ObjectInputStream(bufferIn);

        System.out.println(input.read());
    } catch(Exception e) {
        System.out.println(path);
        e.printStackTrace();
    }

    if(1==1) throw new Error("Could not read DivisionDataFTC at " + path);
    return null;
}

我成功写入了数据 - 我已验证该文件为空。 (如果相关,其内容始终为 7.99kb)。

需要说明的是,该错误不会发生在 ObjectOutputStream 的实例化上。这就是使这个问题与众不同的原因——错误发生在 readObject() 调用上。我的输出是一个非常长的 EOFException:

java.io.EOFException
    at java.io.ObjectInputStream$BlockDataInputStream.peekByte(ObjectInputStream.java:2571)
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1315)
    at java.io.ObjectInputStream.readObject(ObjectInputStream.java:369)
    at java.util.ArrayList.readObject(ArrayList.java:733)
    (...cut out most of this because nobody wants to read it...)
    at java.io.ObjectInputStream.readObject(ObjectInputStream.java:369)
    at tournamentftc.DivisionDataFTC.readFromFile(DivisionDataFTC.java:297)
    at firstscouting.FIRSTScouting.runGUI(FIRSTScouting.java:82)
    at firstscouting.FIRSTScouting.main(FIRSTScouting.java:101)
Exception in thread "main" java.lang.Error: Could not read DivisionDataFTC at C:\Users\Noah\Desktop\out.ser
    at tournamentftc.DivisionDataFTC.readFromFile(DivisionDataFTC.java:303)
    at firstscouting.FIRSTScouting.runGUI(FIRSTScouting.java:82)
    at firstscouting.FIRSTScouting.main(FIRSTScouting.java:101)

我不确定为什么会这样。我该如何处理?

最佳答案

你应该关闭ObjectOutputStream,试试

 ObjectOutput output = new ObjectOutputStream(bufferOut);
 output.writeObject(this);
 output.close();

关于java - ObjectInputStream 抛出 EOFException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15171184/

相关文章:

Django + Apache - file.open() 权限被拒绝

python - 通过预先应用的参数 move 多个文件

java - 在 Servlet 中删除和重命名多个文件的问题

java - 运行汉诺塔时的奇怪行为

Java/groovy反射读取方法内容

ruby - 如何仅在 ruby​​ 脚本中递归更改文件权限

scala - 在Scala中,如何通过一对键值在CSV中找到一个elemein?

file-io - NetLogo:从行数可变的输入文件中读取数据

java - 如何使用 LocalDateTime java 检查最小和最大时间,即最小 10 :00 and max time 10:30

java - 使用 Java Swing GUI,如何在后台运行服务器套接字并仍然使用 GUI?