【发布时间】:2021-01-26 07:58:57
【问题描述】:
我正在尝试从 Google Chrome 获取 HTTP 请求以获取其数据。为此,我使用来自BufferedReader 的readLine(),但由于某种原因,我认为它卡在最后一行,因为缓冲区保持打开状态并且它一直在等待更多输入。这是我在 while 循环中使用的代码:
String line;
ArrayList<String> request = new ArrayList<String>();
while ((line = inFromClient.readLine()) != null) {
request.add(line);
}
如果我强行打破循环它可以工作,基本上我试图有效地读取所有行,但没有ready()的不一致
【问题讨论】:
-
卡在最后一行是什么意思?它卡在
}? -
我不知道谷歌浏览器如何将其数据发送到您的程序,但我认为它可能会使流保持打开状态并将其重用于所有 http 请求。如果我查看
BufferedReader#readLine()的文档,它会说“如果已到达流的末尾,则 [returns] null”。我怀疑您的循环并没有真正“卡住”,它只是在等待更多数据。仅仅因为您读取了所有可用数据并不意味着您已到达数据流的末尾。 -
你可以检查
BufferedReader#ready()而不是空检查。 -
@HamzaBelmellouki - 建议使用
ready()作为解决方案......这是个坏主意。
标签: java bufferedreader