Scanner.close方法为什么关闭所有扫描仪?

时间:2018-08-27 13:31:07

标签: java java.util.scanner

在我的代码中,我打开了两种扫描仪方法,但关闭一台扫描仪将全部关闭。

LEFT(LIST_OF_NUMBERS,10)

10, 20, 39

`这里xd.close也会关闭我的扫描仪,为什么呢?以及如何克服这个问题?朋友我需要知道为什么吗?还有其他方法可以暂时关闭扫描仪以防止内存泄漏吗?

2 个答案:

答案 0 :(得分:3)

因为python-ivi将隐式关闭discord.Forbidden

  

如果此扫描仪尚未关闭,则其基础   可读性还实现了Closeable接口,然后可读性的   close方法将被调用。

答案 1 :(得分:3)

为什么?因为规范就是这样说的;请参阅@Sun的答案作为参考以及规范中的文字。

  

它如何克服这个问题?

请勿在包含close()的{​​{1}}中调用Scanner。这只是一般原则的一种应用,即资源应该由打开它的相同代码来关闭。 (JVM打开System.in,因此您不应该关闭它。)

或者,如果您必须关闭System.in,则编写或找到忽略Scanner方法的InputStream包装器类,然后使用该包装器包装{{ 1}}。

顺便说一句,多次实例化close()是一个坏主意。问题是System.in可能会读取任何或所有预输入内容。如果您有两个或多个包装相同的基础流,则一个new Scanner(System.in)可以捕获以后需要读取的输入。如果在shell级别上重定向标准输入,这可能会导致偶尔的意外行为,并且有可能导致您的应用程序失败。