说我有以下功能
public static void myfunc(String filename) {
new FileInputStream(filename);
}
当我调用该函数时,是否会出现资源泄漏,因为FileInputStream永远不会被释放?
未来的参考,有没有办法在调用函数后验证资源是否尚未发布?
答案 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();
}
}