在什么条件下Java的Scanner.hasNextLine()会阻塞?

smw*_*dia 20 java

Scanner.hasNextLine()状态的javadoc :

如果此扫描器的输入中有另一行,则返回true.此方法可能在等待输入时阻塞.扫描仪不会超过任何输入.

该方法会在什么条件下阻止?

Era*_*ran 20

这取决于扫描仪从中获取输入的来源.

例如,如果它是一个文件,则整个输入都是可用的,因此hasNextLine()不会阻塞(因为它可以确定地知道何时到达文件的末尾并且没有更多的输入.

另一方面,如果源是标准输入,则总会有更多输入 - 用户总是可以输入更多输入 - 因此hasNextLine()会阻塞,直到用户键入新的输入行.

  • @aioobe我不认为它避免了这个问题.当您创建一个Scanner实例时,您知道它从哪个源获取输入,因此您知道它是否会阻塞.如果您在不知道其输入源的情况下获得Scanner实例,则无法知道它是否会阻止. (6认同)
  • 这是一个很好的答案和解释为什么它的工作原理.但这有点避免了实际的问题. (2认同)