我正在尝试使用 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/