为什么BufferedReader readline()一直在阻塞状态
时间: 2023-12-12 21:33:11 浏览: 305
BufferedReader的readLine()方法会一直阻塞的原因是因为它在读取输入流时需要等待换行符或回车符的出现,如果输入流中没有这些符号,那么readLine()方法就会一直等待,导致阻塞。为了避免这种情况,可以使用BufferedReader的ready()方法来检查输入流是否准备好被读取,或者使用其他的读取方法来替代readLine()方法。
以下是两种解决方法的示例代码:
1. 使用ready()方法检查输入流是否准备好被读取:
```java
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String line = null;
while (!br.ready()) {
// 等待输入流准备好被读取
}
line = br.readLine();
```
2. 使用read()方法替代readLine()方法:
```java
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
char[] buffer = new char[1024];
int len = 0;
StringBuilder sb = new StringBuilder();
while ((len = br.read(buffer)) != -1) {
sb.append(buffer, 0, len);
if (sb.indexOf("\r\n") != -1) {
// 找到换行符或回车符,停止读取
break;
}
}
String line = sb.toString().trim();
```
阅读全文