如何正确关闭ObjectInputStream?

bar*_*ssa 0 java objectinputstream

FileInputStream第一次使用a 并尝试Item从文件加载objects().

这是我的代码:

    try {

        FileInputStream fi = new FileInputStream(f);
        ObjectInputStream reader = new ObjectInputStream(fi);

        while (true) {
            Item i = (Item)reader.readObject();
            System.out.println(i.getName());
        }

    } catch (Exception e) {
        System.out.println(e.toString());
    }
Run Code Online (Sandbox Code Playgroud)

我已经读过这是执行它的标准方法,代码工作正常.然而,这种方式fireader永远不会关闭,因为编译器跳转到catch只要一个块EOFException被抛出.

编译器不会让我关闭fi,并readercatchfinally块.这真的是它应该如何吗?如何正确关闭输入对象?

jib*_*him 5

您可以使用try-with-resources语句,它将如下所示:

try (FileInputStream fi = new FileInputStream(f); 
    ObjectInputStream reader = new ObjectInputStream(fi)) {        

    while (true) {
        Item i = (Item)reader.readObject();
        System.out.println(i.getName());
    }

} catch (Exception e) {
    System.out.println(e.toString());
}
Run Code Online (Sandbox Code Playgroud)

以下是有关此方法的更多信息的文档.