如果我调用一个BufferedReader方式如下:关闭一个BufferedReader
Integer.parseInt(new BufferedReader(new InputStreamReader(System.in)).readLine());
请问JVM知道自动关闭它在不使用时?如果不是,我该如何关闭它?
如果我调用一个BufferedReader方式如下:关闭一个BufferedReader
Integer.parseInt(new BufferedReader(new InputStreamReader(System.in)).readLine());
请问JVM知道自动关闭它在不使用时?如果不是,我该如何关闭它?
如果您使用的是java 7或更高版本,并且您的代码位于try catch resource
区块,则它是Auto closes
。
如果在以下版本中,您必须关闭close()。为此,您必须更改当前的使用方式并获取参考。
用于AutoCloseable的+1 –
不要链接它们,声明和分配变量,然后在使用后关闭它。
InputStreamReader isReader;
BufferedReader bfReader;
try {
isReader = new InputStreamReader(System.in);
bfReader = new BufferedReader(isReader).readLine();
} catch (Exception e) {
// handle as per the requirement.
} finally {
bfReader.close();
}
如果您使用java 7,那么,如果您使用try子句定义,那么它们将自动关闭。检查here更多细节
试戴与资源语句声明一个 或多个资源的try语句。资源是作为一个对象,必须在程序结束后关闭 。试用资源 语句确保在 语句结束时关闭每个资源。任何实现了java.lang.AutoCloseable的对象,其中包括所有实现java.io.Closeable的对象,都可以作为 资源使用。
它说[这里](http://stackoverflow.com/questions/1388602/do-i-need-to-close-both-filereader-and-bufferedreader?rq=1)关闭BufferedReader会关闭InputStreamReader为好。 – user2789772
确实如此。 1)你应该只关闭这种类型的外部装饰器,这里是BufferedReader。 2)你当然不会推荐那个catch块被忽略,对吗? 3)我通常在结束之前检查是否为空。请记住,新手将从字面上理解你的代码,包括空的catch块。 –
@HovercraftFullOfEels:应按照他的要求处理问题所有者。 –
小心关闭任何包装'System.in'的'InputStream'或'Reader'。那也将被关闭。 –