2011-03-20 80 views
2

有一个FileInputStream,我想知道是否需要关闭它吗?如果是,如果我将这个流对象传递给另一个方法,我可以在那个子方法中关闭吗?我们是否总是要关闭流?

+0

是,关闭流是用了之后好习惯。 – 2011-03-20 12:53:20

回答

2

是的,你可以在你传递它的方法中关闭流。

但要小心。如果在方法调用后使用相同的流,它将保持关闭。

最好的做法是在您完成所有您想要的任务后关闭流。

1

是的,你应该关闭它,如果你将它传递给子方法,你可以关闭它。如果你将它传递给Reader,如果你在Reader上调用close,它也会关闭流。

0

你应该总是关闭一个流,以释放OS上的开放资源。打开一个流总是会返回一个标识符,您可以使用它来关闭它,无论您身处何处(只要标识符有效),无论它们来自另一个方法或类。

2

是 - 如果您确定没有更多内容会写入流中。

否 - 例如在Servlet中使用outputStream - 你得到这个流,写入他们,但你不关闭它。这是因为稍后可以访问相同的流。主要规则是:总是关闭你自己打开的流

1

你可以在任何你想要的位置关闭流。但是您应该关闭打开它的流以获得更好的可读性。您仍然可以在其他的方法来处理数据流:

try { 
    InputStream stream = //open the stream; 
    PerformActionOnStream(s); 
} catch (IOException e) { 
    //handle error 
} finally { 
    stream.close(); 
} 

没有理由在PerformActionOnStream()关闭流。只要你完成就回来。

java 7最好只

try(InputStream stream = new MyStream()) { 
    // code 
} catch (Exception e) { 
    // 
} 
+0

如何处理异步情况,我需要立即从PerformActionOnStream返回? – user496949 2011-03-20 13:14:04

+0

有趣的问题。在这种情况下,它将取决于你想要达到的目标。如果你想使用另一个线程读取流,我会建议该线程打开文件。在不可能的情况下,您应该写一条评论,将所有权转让给该线程。 – paztulio 2011-03-20 13:28:23

+0

即使你不能在try块中定义InputStream,因为它不会在finally中以范围方式提供。 – MeBigFatGuy 2011-03-20 13:45:35

相关问题