代码之家  ›  专栏  ›  技术社区  ›  IAdapter

方法可能无法在异常时关闭流

  •  7
  • IAdapter  · 技术社区  · 15 年前

    我发现findbugs有一个严重错误:

    该方法创建一个IO流对象,不将其分配给任何字段,不将其传递给其他方法,也不返回它,并且似乎不会在该方法之外的所有可能的异常路径上关闭它。这可能导致文件描述符泄漏。通常,最好使用finally块来确保流已关闭。

    try {
    ...
    stdError = new BufferedReader(new InputStreamReader(p.getErrorStream()));
    ...
    } catch (IOException e) {
        throw new RuntimeException(e);
    } finally {
        try {
            if (stdError != null) {
                stdError.close();
            }
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }
    

    我需要关门吗 InputStreamReader 或者 p.getErrorStream (它返回 InputStream )?

    2 回复  |  直到 11 年前
        1
  •  4
  •   Guillaume    15 年前

    BufferedReader和InputStreamReader都在基础流关闭时关闭它们。你应该关门就好了 stdError

        2
  •  5
  •   Matthew T. Staebler    15 年前

    在创建 BufferedReader 对象?由管理的流 InputStreamReader 对象直到将来垃圾收集器决定销毁对象时才会关闭。

    如果在创建 输入流阅读器 对象。