gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 05:31:14 33 4
gpt4 key购买 nike

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

我希望 Scanner.next() 阻塞,以便服务器线程可以等待读取内容。

然而,它有时会给我:

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 文档说 next() “有时”会阻塞,但没有说明 nextLine() 是否阻塞。

一些在线代码将它包装在一个测试是否为空的 if 中,但我读到它永远不会返回空。我应该怎么做才能使阻塞 IO 在我的套接字中正常工作?

具体而言,

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

最佳答案

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

关于java - Scanner.nextLine() 什么时候阻塞?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21036054/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com