我在客户端/服务器程序中使用扫描程序进行套接字连接。
我希望Scanner.next()阻塞,这样Server线程就可以等待要读取的内容。
然而,它有时会给我:
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?
发布于 2014-01-10 12:42:11
每当用于构造Scanner类的InputStream阻塞时,该类就会阻塞。当从文件读取时,它通常不会阻塞,因为它的内容很容易获得(例如,inputStream.available() > 0),毕竟它们在你的机器上。但是,如果您使用可能需要等待数据到达的InputStream来构造Scanner (例如,从远程客户端读取文本,等待页面加载以便您可以读取其源代码,等等)。然后Scanner#nextLine()将阻塞,因为它需要等待足够的信息来构建下一条线路。
发布于 2014-01-10 12:31:50
如果它正在从网络读取数据,并且输入中没有数据或没有换行符,并且还没有到达EOS,它就会阻塞。您必须从文件中读取数据。
https://stackoverflow.com/questions/21036054
复制相似问题