gpt4 book ai didi

java - 为什么 scanner.hasNext() 在读取 Http Request 时阻塞

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:26:16 24 4
gpt4 key购买 nike

我正在编写一个服务器来接收 http 请求(只有 GET 方法作为学校工作简化的一部分)

我使用 Socket 类来获取连接然后我使用 InputStream 以及 Scanner 来读取 http 请求。

但是,当我使用 hasNext() 逐行读取 http 请求 header 时。程序在 hasNext() 处挂起,等待更多输入,即使它已经消耗了所有行。

下面是我的readRequest方法:

public void readRequest(Socket client) throws BadRequestException {
StringBuilder builder = new StringBuilder();

try {
Scanner sc = new Scanner(client.getInputStream());
sc.useDelimiter("\\r\\n");

while(sc.hasNext()){
builder.append(sc.next());
builder.append("\n");
}

parseRequestFromClient(builder.toString());
} catch (IOException e) {
throw new BadRequestException(e.getMessage());
}

最佳答案

你面临这个问题是因为 hasNext 将在后台读取源代码以检查是否有另一个匹配的标记,直到源代码通过返回 -1 到达其结尾,这是不是你这里的情况。

提醒这里是方法的 Javadoc hasNext :

Returns true if this scanner has another token in its input. This method may block while waiting for input to scan. The scanner does not advance past any input.


您应该避免重新发明轮子并使用可以为您完成的库,例如 DavidWebb和许多其他人。

关于java - 为什么 scanner.hasNext() 在读取 Http Request 时阻塞,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39306235/

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