java - 从 BufferedReader 中提取行时无法退出 Java 中的 while 循环

标签 java http request bufferedreader

我正在尝试使用 while 循环从 java 中的 BufferedReader 读取行。它将按预期遍历 BufferedReader,但是当它应该从循环中中断时,它将“卡住”代码的执行。我尝试调试代码,但执行提示在循环后丢失。不知道我做错了什么:

代码片段:

BufferedReader reader = new BufferedReader(new  InputStreamReader(yourSocket.getInputStream()));
String nextLine = null;

nextLine = reader.readLine();
while (nextLine != null){ //print all of input stream
    System.out.println(nextLine);
    nextLine = reader.readLine();
}

我假设当 BufferedReader 中没有剩余行时,nextLine 变量将返回 null 并中断循环。我尝试过手动打破循环,但似乎也不起作用。同样,代码可以很好地打印 BufferedReader 的行,但 while 循环后面的任何代码不一定会运行。

如果此信息还不够,请告诉我。如果需要的话我也可以过去完整的代码。

谢谢, 帕特

最佳答案

从套接字读取是阻塞调用。您的程序不知道另一端已完成对套接字的写入。您通常必须使用一些标记或大小信息来标识另一端的程序已完成对套接字的写入。一旦你读取了该标记,你就退出循环。此行为与读取文件不同 - 当到达文件末尾时,调用 readLine() 方法时会返回 null,并且可以像示例中那样退出。

关于java - 从 BufferedReader 中提取行时无法退出 Java 中的 while 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5986018/

相关文章:

javascript - 从 Angular 中的 HTTP 请求错误响应中识别 HTTP 动词

http - Content-Encoding : gzip 需要注意的事项

http - wget 说 406 Not Acceptable

java - 在 JSP 和 Servlet 中使用对象

java - 没有LayoutManager就无法使用JTree

java - 如何使用具有相同值结构的动态键数反序列化列表?

java - 字符串.split ("_(B")

java - 如何获取图像特定像素的颜色? - java

函数中的 Node.js 请求

php - 未定义索引 : Error in php script