Java - 内联表达式的资源释放

时间:2013-01-29 19:30:06

标签: java resources allocation

说我有以下功能

public static void myfunc(String filename) {
    new FileInputStream(filename);
}

当我调用该函数时,是否会出现资源泄漏,因为FileInputStream永远不会被释放?

未来的参考,有没有办法在调用函数后验证资源是否尚未发布?

3 个答案:

答案 0 :(得分:2)

是的,资源泄漏。大多数IDE(例如Eclipse)都会发出警告来指示这一点。你应该做的事情如下:

public static void myfunc(String filename) throws IOException {
    FileInputStream stream = null;
    try {
        stream = new FileInputStream(filename);
        ...
    } finally {
        stream.close();
    }
}

或者,如果您使用的是Java 7,则可以使用try-with-resource语句。

答案 1 :(得分:1)

是的,会有资源泄漏。应始终关闭FileInputStream。

当GC运行时,应调用finalize()方法并在此时关闭流,但您不应该依赖它。

检查资源泄漏的方法是阅读javadoc,解释它。基本上,所有实现Closeable接口的类都应该明确地关闭。

答案 2 :(得分:-1)

你明白这个功能没有做任何有用的事,对吧?它没有将FileInputStream返回给调用者或用它做任何事情。

通常,您将确保使用try / finally块关闭流:

InputStream input = null ; 

try {
    input = new FileInputStream(name);

    [read and process input]

} finally {
    if (input != null) {
        input.close();
    }
}