首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ObjectInputStream抛出EOFException

ObjectInputStream抛出EOFException
EN

Stack Overflow用户
提问于 2013-03-02 05:40:50
回答 2查看 13.1K关注 0票数 2

我正在写一个课程来记录比赛中的比赛数据。我想将这个类存储到一个文件中,所以我使用了一个ObjectInputStream。我正在编写的类实现了可序列化。我得到了一个EOFException,我在这里和其他地方找到的解决方案都没有真正解决这个问题。

我的档案作者是:

代码语言:javascript
复制
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) {}
}

我的文件阅读器是:

代码语言:javascript
复制
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

代码语言:javascript
复制
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)

我不知道为什么会这样。我该怎么处理?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-03-02 05:46:31

你应该关闭ObjectOutputStream,试试

代码语言:javascript
复制
 ObjectOutput output = new ObjectOutputStream(bufferOut);
 output.writeObject(this);
 output.close();
票数 5
EN

Stack Overflow用户

发布于 2013-03-02 05:47:27

您需要关闭您的输出流,还需要调用readObject()而不是read。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15171184

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档