FileInputStream fstream = new FileInputStream(someFile.getPath());
DataInputStream in = new DataInputStream(fstream);
如果我致电in.close()
,它还会关闭fstream
吗?我的代码给出了GC Exception,如下所示:
java.lang.OutOfMemoryError:超出GC开销限制
答案 0 :(得分:7)
是的,DataInputStream.close()
也会关闭您的FileInputStream
。
答案 1 :(得分:5)
您的DataOutputStream
继承了close()
- 来自FilterOutputStream
documentation的AutoCloseable
-interface人的方法:
关闭此输出流,释放所有系统资源 与流相关联。
FilterOutputStream的close方法调用它的flush方法,和 然后调用其基础输出流的close方法。
所有Writer
- 实现都应该如此(尽管文档中没有说明)。
为避免在使用Java中的Streams时遇到内存问题,请使用以下模式:
// Just declare the reader/streams, don't open or initialize them!
BufferedReader in = null;
try {
// Now, initialize them:
in = new BufferedReader(new InputStreamReader(in));
//
// ... Do your work
} finally {
// Close the Streams here!
if (in != null){
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
Java7看起来不那么混乱,因为它引入了tutorial,它由所有Stream / Writer / Reader类实现。请参阅{{3}}。