有一个FileInputStream,我想知道是否需要关闭它吗?如果是,如果我将这个流对象传递给另一个方法,我可以在那个子方法中关闭吗?我们是否总是要关闭流?
回答
是的,你可以在你传递它的方法中关闭流。
但要小心。如果在方法调用后使用相同的流,它将保持关闭。
最好的做法是在您完成所有您想要的任务后关闭流。
是的,你应该关闭它,如果你将它传递给子方法,你可以关闭它。如果你将它传递给Reader,如果你在Reader上调用close,它也会关闭流。
你应该总是关闭一个流,以释放OS上的开放资源。打开一个流总是会返回一个标识符,您可以使用它来关闭它,无论您身处何处(只要标识符有效),无论它们来自另一个方法或类。
是 - 如果您确定没有更多内容会写入流中。
否 - 例如在Servlet中使用outputStream - 你得到这个流,写入他们,但你不关闭它。这是因为稍后可以访问相同的流。主要规则是:总是关闭你自己打开的流
你可以在任何你想要的位置关闭流。但是您应该关闭打开它的流以获得更好的可读性。您仍然可以在其他的方法来处理数据流:
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) {
//
}
如何处理异步情况,我需要立即从PerformActionOnStream返回? – user496949 2011-03-20 13:14:04
有趣的问题。在这种情况下,它将取决于你想要达到的目标。如果你想使用另一个线程读取流,我会建议该线程打开文件。在不可能的情况下,您应该写一条评论,将所有权转让给该线程。 – paztulio 2011-03-20 13:28:23
即使你不能在try块中定义InputStream,因为它不会在finally中以范围方式提供。 – MeBigFatGuy 2011-03-20 13:45:35
- 1. 我们是否需要关闭file_get_contents?
- 2. 我们总是需要关闭我们提供的ModelViewViewController吗?
- 3. 关闭流,总是必要的? .net
- 4. 是否需要关闭WebInvoke方法流
- 5. 我们是否总是需要使用async关键字?
- 6. 关闭套接字是否关闭流?
- 7. stream.spliterator()是否关闭流?
- 8. 在读取ClassLoader.getSystemResourceAsStream之后,我们是否需要显式关闭输入流?
- 9. 我们是否仍需要担心用户关闭Cookie?
- 10. 我是否需要关闭()FileReader和BufferedReader?
- 11. 我是否需要手动关闭输入流?
- 12. 我是否需要关闭Android中FileReader()的流?
- 13. 我们是否应该总是关闭JBoss应用程序客户端的javax.naming.InitialContext?
- 14. 我们是否总是需要使用CacheManager?
- 15. 关闭资源总是很重要吗?
- 16. 我们是否需要ezpublish_legacy?
- 17. 我们是否总是需要检查malloc/realloc之后指针是否为空?
- 18. 我需要关闭流吗?
- 19. 该输入流是否关闭?
- 20. 是否.Disposing StreamWriter关闭底层流?
- 21. 如何知道流是否关闭?
- 22. 当没有底层流时,是否需要关闭扫描仪?
- 23. 我的项目总是执行关闭
- 24. 关闭Socket还是应该关闭流?
- 25. 是否可以在不关闭流的情况下关闭Reader?
- 26. 我是否需要使用关键字关闭SQL Server连接?
- 27. ARITHABORT,ARITHIGNORE - 是否需要关闭它?
- 28. 是否需要关闭连接
- 29. 是否需要“关闭”.net配置
- 30. 是否需要关闭PipedInputStream和PipedOutputStream
是,关闭流是用了之后好习惯。 – 2011-03-20 12:53:20