关闭链接到System.in的扫描程序

Jav*_*107 30 java java.util.scanner

我有一个Scanner链接System.in.现在,在使用之后Scanner,我应该关闭它,因为它是不好的编码实践,让它打开.但是,如果我关闭Scanner,我也将关闭System.in!任何人都可以告诉我如何关闭Scanner没有关闭System.in(如果有任何方式).

Pet*_*rey 24

最简单的方法是,如果您不想关闭基础流,请不要关闭扫描程序.

理想情况下,您应该只创建一个扫描仪,用于程序的生命周期.在任何情况下,似乎你没有充分的理由关闭它.

  • 这可以通过要求代码知道它与系统进行通信,或者至少是不应该关闭的东西.Paul Jermans对"CloseShieldInputStream"的推荐允许代码忽略该事实并简单地将其视为任何其他InputStream,并在完成时尝试关闭它.这里简单的事情真的取决于背景. (3认同)
  • @candied_orange,你不应该关闭一个不属于你的流(考虑到Java中缺乏强烈的所有权概念,这大致意味着你没有*打开*)。如果您从其他地方获取流,请不要关闭扫描程序。 (2认同)

pau*_*man 23

一种选择是将System.in流包装在一个CloseShieldInputStream阻止其关闭的流中.然后,您的读者将使用CloseShieldInputStream而不是原始System.in流.

以下是该类的API:http: //commons.apache.org/io/apidocs/org/apache/commons/io/input/CloseShieldInputStream.html


mis*_*ist 7

而不是添加盾牌类和类似的东西,只需添加一个很好的评论和一个

        @SuppressWarnings("resource")
Run Code Online (Sandbox Code Playgroud)

那太好了.我似乎没有看到这种方法有很多缺点.不要忘记评论.

  • @derHugo 我认为他们的意思是**不要**关闭扫描仪并使用注释抑制关于 *that* 的警告并添加解释性评论。 (4认同)