首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Scanner.nextLine()什么时候阻塞?

Scanner.nextLine()什么时候阻塞?
EN

Stack Overflow用户
提问于 2014-01-10 12:10:39
回答 2查看 2.5K关注 0票数 1

我在客户端/服务器程序中使用扫描程序进行套接字连接。

我希望Scanner.next()阻塞,这样Server线程就可以等待要读取的内容。

然而,它有时会给我:

代码语言:javascript
复制
java.util.NoSuchElementException: No line found
    at java.util.Scanner.nextLine(Scanner.java:1585)
    at cscie55.hw4.Server.serviceClient(Server.java:146)
    at cscie55.hw4.Server.main(Server.java:106)

java文档说nextLine()“有时”阻塞,但没有说明next()是否阻塞。

一些在线代码将其包装在一个if中,但我读到它从不返回null。我应该怎么做才能让阻塞IO在我的socket中正常工作?

具体来说,

什么时候Scanner.nextLine()阻塞而不是抛出NoSuchElementException?

EN

回答 2

Stack Overflow用户

发布于 2014-01-10 12:42:11

每当用于构造Scanner类的InputStream阻塞时,该类就会阻塞。当从文件读取时,它通常不会阻塞,因为它的内容很容易获得(例如,inputStream.available() > 0),毕竟它们在你的机器上。但是,如果您使用可能需要等待数据到达的InputStream来构造Scanner (例如,从远程客户端读取文本,等待页面加载以便您可以读取其源代码,等等)。然后Scanner#nextLine()将阻塞,因为它需要等待足够的信息来构建下一条线路。

票数 3
EN

Stack Overflow用户

发布于 2014-01-10 12:31:50

如果它正在从网络读取数据,并且输入中没有数据或没有换行符,并且还没有到达EOS,它就会阻塞。您必须从文件中读取数据。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21036054

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档