【问题标题】:How to read multiple same objects from a file如何从文件中读取多个相同的对象
【发布时间】:2016-08-15 21:39:16
【问题描述】:

我正在尝试使用 Serializable 从文件中读取对象(类的相同对象),但是当它读取所有对象时,它给了我错误IOExceptionjava.io.ObjectInputStream$BlockDataInputStream.peekByte

我正在读取对象,然后保存到列表。但是当它到达时,可以说 EOF 它会引发错误。

这是我的方法:

private static void updateBook(String name) {
    // TODO Auto-generated method stub
    FileInputStream fis = null;
    ObjectInputStream in = null;
    Object obj = new Object();
    List<Object> libb = new ArrayList<Object>();
    File file = new File(name + ".ser");
    if (file.exists()) {
        try {
            fis = new FileInputStream(file);
            in = new ObjectInputStream(fis);
            try {
                while (true) {

                    obj = in.readObject();
                    libb.add(obj);
                }
            } catch (OptionalDataException e) {
                if (!e.eof) throw e;
                //JOptionPane.showMessageDialog(null, "Done!");
            } finally {
                in.close();
                //fis.close();
            }

            for(int j = 0; j < libb.size(); ++j) {
                Book li = new Book();

                 li = (Book) libb.get(j);
                System.out.println(li.getBookName());
            }
            //

        } catch (IOException e) {
            e.printStackTrace();

        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    } else {
        System.out.println("\nThe file does not Exist!");
    }
}

谁能告诉我如何避免来自while(true)的这个错误。

完全错误:

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)

【问题讨论】:

标签: java eclipse object serializable


【解决方案1】:

在您的try 语句中,您缺少EOFException 的catch 子句:

try {
    while (true) {

        obj = in.readObject();
        libb.add(obj);
    }
} catch (OptionalDataException e) {
    if (!e.eof) throw e;
    //JOptionPane.showMessageDialog(null, "Done!");
} catch (EOFException eofe) {
    // treat it as you like
} finally {
    in.close();
    //fis.close();
}

【讨论】:

    【解决方案2】:

    你应该添加:

    catch (EOFException e){
        // do stuffs
    }
    

    因为EOFException 没有被抓到。

    【讨论】:

    • break cannot be used outside of the loop
    • 是的 - 没有意识到 while 循环的位置
    猜你喜欢
    • 2013-04-06
    • 1970-01-01
    • 1970-01-01
    • 2020-12-25
    • 2013-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-19
    相关资源
    最近更新 更多