java - 如何正确关闭ObjectInputStream?

标签 java objectinputstream

我正在使用FileInputStream第一次尝试从文件加载对象 ( Item )。

这是我的代码:

    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());
    }

我读到这是执行此操作的标准方法,并且代码运行良好。然而,这样fireader永远不会关闭,因为编译器会跳转到 catch立即阻止 EOFException被抛出。

编译器不允许我关闭 fireadercatchfinally堵塞。这真的是应该的样子吗?如何正确关闭输入对象?

最佳答案

您可以使用 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());
}

这里是documentation了解有关此方法的更多信息。

关于java - 如何正确关闭ObjectInputStream?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47397157/

相关文章:

java - 升级 Java Serializable 类

java - 为 vertx 项目生成 OpenAPI 规范

java - Lotus Notes API 在文档集合合并中给出错误

java - 在我的循环中哪里创建 ArrayList?

java - 如何打开、写入和保存文件,同时避免错误?

Java:静态工厂方法和线程安全

java - 无法从 .dat 文件读取可序列化类

java - java中可以随机访问对象吗?

java - 使用 ObjectInputStream#readUnshared() 时出现意外的 OutOfMemoryError

java - 多人 Java 2D 平台游戏 : ObjectInputStream. readObject() 停止程序?