关闭DataInputStream还会关闭FileInputStream吗?

时间:2012-12-26 12:11:28

标签: java inputstream

FileInputStream fstream = new FileInputStream(someFile.getPath());
DataInputStream in = new DataInputStream(fstream);

如果我致电in.close(),它还会关闭fstream吗?我的代码给出了GC Exception,如下所示:

java.lang.OutOfMemoryError:超出GC开销限制

2 个答案:

答案 0 :(得分:7)

是的,DataInputStream.close()也会关闭您的FileInputStream

答案 1 :(得分:5)

您的DataOutputStream继承了close() - 来自FilterOutputStream documentationAutoCloseable-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}}。