bufferedreader readline
时间: 2023-04-24 17:04:22 浏览: 102
BufferedReader的readline方法是用来读取文本文件中的一行数据的。它会读取文件中的一行数据,直到遇到换行符或者文件结束符为止。读取到的数据会被返回成一个字符串。这个方法可以用来读取文本文件中的每一行数据,比如读取日志文件、配置文件等。
相关问题
bufferedreader readline 阻塞
BufferedReader的readLine方法会阻塞,直到读取到一行完整的数据或者读取到流的末尾。这是因为readLine方法是按行读取数据的,需要读取到一行完整的数据才能返回。如果读取的数据不足一行,readLine方法会一直等待直到读取到足够的数据。因此,在使用BufferedReader的readLine方法时,需要注意阻塞的情况,可以使用多线程或者设置超时时间来避免阻塞。
为什么BufferedReader readline()一直在阻塞状态
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();
```
阅读全文