gpt4 book ai didi

Java - 扫描仪在没有输入时不会暂停

转载 作者:行者123 更新时间:2023-12-02 07:37:18 25 4
gpt4 key购买 nike

我正在本地 jetty 下运行客户端和servlet。当我在客户端中阅读消息时,我会:

in = new Scanner(conn.getInputStream());
StringBuffer messageBuffer = new StringBuffer();
while (in.hasNext()) {
messageBuffer.append(in.next()).append(" ");
}

我预计当 servlet 没有数据时,它应该卡住在

while (in.hasNext())

相反,我最终得到的是空的 messageBuffer,我必须处理它并一次又一次地调用该方法,直到收到消息。为什么会发生这种情况?如何让它停在 while 语句处并等待有数据传入?

以下是 URL 连接的启动方式(一次,在客户端构造函数中):

try {
url = new URL("http://localhost:8182/stream");
conn = (HttpURLConnection) url.openConnection();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException ioE) {
ioE.printStackTrace();
}

最佳答案

来自扫描仪文档:

The next() and hasNext() methods and their primitive-type companion methods (such as nextInt() and hasNextInt()) first skip any input that matches the delimiter pattern, and then attempt to return the next token. Both hasNext and next methods may block waiting for further input. Whether a hasNext method blocks has no connection to whether or not its associated next method will block.

它说它可能会阻塞,但它不是API的一部分,它取决于你扫描的内容的下划线实现。

无论如何,您需要通过以下方式自己实现等待:

while (!in.hasNext() && !stop){
sleep();
}

关于Java - 扫描仪在没有输入时不会暂停,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12021978/

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