[英]What are the Negative Effects of Not Closing a InputStreamReader
我正在修改另一个程序员编写的Java程序的一些代码,并且想知道将InputStreamReader
包装在BufferedReader
与制作一个InputStreamReader
对象然后在其上再创建一个新的BuffererReader
对象有什么BuffererReader
。 例如,这样做有什么好处
FileInputStream localFileInputStream = null;
localFileInputStream = new FileInputStream(someFile);
InputStreamReader localInputStreamReader = new InputStreamReader(localFileInputStream);
BufferedReader localBufferedReader = new BufferedReader(localInputStreamReader);
// Do some file processing
localFileInputStream.close();
localInputStreamReader.close();
localBufferedReader.close();
与
FileInputStream localFileInputStream = null;
localFileInputStream = new FileInputStream(someFile);
BufferedReader localBufferedReader = new BufferedReader(new InputStreamReader(localFileInputStream));
// Do some file processing
localFileInputStream.close();
localBufferedReader.close();
在第一段代码中,我调用localInputStreamReader.close();
但在第二个步骤中,我不知道(不知道如何做)。 这会有所不同吗?
从Java文档( BufferedReader)中 :
关
公共无效引发IOException
从类复制的描述:读者
关闭流并释放与之关联的所有>系统资源。 一旦关闭流,进一步的read(),ready(),mark(),reset()或skip()调用将引发IOException。 关闭先前关闭的流无效。
指定者:接口Closeable中的close指定者:接口AutoCloseable中的close
指定者:类关闭Reader
抛出:IOException-如果发生I / O错误
在BufferedReader上调用close()会默认实现关闭底层流,因为它是在超类Reader中指定的。 因此,您的两个代码段实际上都执行相同的操作。 当然,如果没有这样的规范,或者您将使用自己的编写器而忘记关闭给定的流,那么它将起到一定的作用。 例如,不关闭FileInputStream会使基础文件不可访问或至少不可写。
值得一提的是
BufferedReader localBufferedReader = new BufferedReader(
new InputStreamReader(new FileInputStream(someFile)));
// Do some file processing
localBufferedReader.close();
足够了。 在Java 7及更高版本中,您可以使用try-with-resources来忘记关闭它:
try(BufferedReader localBufferedReader = new BufferedReader(
new InputStreamReader(new FileInputStream(someFile)))) {
// Do some file processing
}
请注意, java.io.Closeable的API(您的所有Reader和InputStreams都实现了)说:
关闭此流并释放与其关联的所有系统资源。
因此,该规范要求兼容的实现将关闭调用实际上委派给所有包装的资源。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.