ObjectInputStream抛出EOFException

Aza*_*Aza 2 java file-io file serializable filereader

我正在写一个班级来跟踪锦标赛的比赛数据.我想将这个类存储到一个文件中,所以我正在使用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) {}
}
Run Code Online (Sandbox Code Playgroud)

我的文件阅读器是:

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;
}
Run Code Online (Sandbox Code Playgroud)

我成功写了数据 - 我已经验证该文件不是空的.(如果相关,其内容始终为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)
Run Code Online (Sandbox Code Playgroud)

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

Evg*_*eev 5

你应该关闭ObjectOutputStream,试试吧

 ObjectOutput output = new ObjectOutputStream(bufferOut);
 output.writeObject(this);
 output.close();
Run Code Online (Sandbox Code Playgroud)