当没有潜在的流时,是否有必要关闭扫描仪?

时间:2013-07-30 11:22:11

标签: java java.util.scanner

直接来自此扫描仪API

String input = "1 fish 2 fish red fish blue fish";
     Scanner s = new Scanner(input).useDelimiter("\\s*fish\\s*");
     System.out.println(s.nextInt());
     System.out.println(s.nextInt());
     System.out.println(s.next());
     System.out.println(s.next());
     s.close(); 

6 个答案:

答案 0 :(得分:3)

  

首先我们养成习惯;然后我们的习惯使我们成长。

我会说关闭这个流,因为习惯于关闭finally块中的资源是有道理的。

答案 1 :(得分:2)

我不这么认为,但是如果您更改代码以使用流,最好还是关闭它。这也是一个很好的习惯,你真的很想进入。

答案 2 :(得分:1)

如果我们不关闭Scanner的String,就不会有资源泄漏。内部new Scanner(String)创建StringReader作为基础来源,当我们关闭Scanner时,它会关闭StringReader,但这不起作用。

答案 3 :(得分:0)

如果您希望扫描程序标记为已关闭(以便对象上的所有后续操作都会立即失败),则必须调用 Scanner.close()

答案 4 :(得分:0)

我相信使用scanner.close(); 我这样说是因为它可以防止资源泄漏,如果你把它变成习惯,那么对你来说非常有益。

答案 5 :(得分:0)

即使扫描仪不是流,您也需要关闭以表明您已经完成其基础流 [1]。像Eclipse这样的IDE经常会发出警告,提示您“资源泄漏:'scanner'从未关闭”。

注意不要关闭 System.in 绑定的扫描仪!由于System.in对象是由JVM打开的,因此应将其留给JVM来关闭它 [2]