java BufferedReader 防止readline阻塞
时间: 2023-12-12 12:33:54 浏览: 293
为了防止`BufferedReader`的`readLine()`方法阻塞,可以使用`ready()`方法来检查是否有可用的输入。如果`ready()`方法返回`true`,则可以使用`readLine()`方法读取输入。如果`ready()`方法返回`false`,则可以使用`Thread.sleep()`方法暂停一段时间,然后再次检查是否有可用的输入。以下是一个示例代码:
```java
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
while (!br.ready()) {
Thread.sleep(200);
}
String input = br.readLine();
System.out.println("输入的内容是:" + input);
```
在上面的代码中,`ready()`方法用于检查是否有可用的输入。如果没有可用的输入,`Thread.sleep(200)`方法将暂停200毫秒,然后再次检查是否有可用的输入。如果有可用的输入,`readLine()`方法将读取输入并将其存储在`input`变量中,然后将其打印到控制台上。
相关问题
BufferedReader.readLine阻塞
`BufferedReader.readLine()` 是 Java 中用于从输入流(如文件、网络连接)读取一行文本的方法,但它会阻塞直到读取到新的一行数据或遇到 EOF(End Of File)。当调用 `readLine()` 时,如果缓冲区中没有可用的数据,方法会暂停执行,直到接收到新的数据或者超时。
这种阻塞行为使得程序能按照数据的到达顺序逐行处理,适合用于处理按行传输的文本流。如果你的应用需要快速响应,而又不确定下一行何时到来,这可能会导致性能问题或用户感知的延迟。因此,在设计时需要权衡是否希望线程在此期间保持活动或者设置适当的超时策略来避免长时间阻塞。
bufferedreader.readline()阻塞
`BufferedReader.readline()`是Java中可用于从输入流中读取一行文本的方法。它被称为"阻塞"是因为当调用这个方法时,如果没有可用的数据可以读取,程序将会被阻塞,即暂停执行直到有数据可用或者遇到异常。
当没有可用的数据时,`BufferedReader.readline()`方法将等待输入流中有足够的数据可供读取。这通常发生在以下情况下:
1. 输入流没有数据可供读取。例如,当程序正在读取一个空文件或者网络连接没有收到数据时,`BufferedReader.readline()`方法将一直阻塞。
2. 输入流的数据速度比程序读取的速度快。当程序没有及时读取输入流中的数据,输入流可能会积累一定量的数据。当程序准备好读取时,`BufferedReader.readline()`方法将会读取所有可用的数据行。
3. 输入流的数据被缓冲。在某些情况下,输入流可能会被缓冲以提高读取性能。当调用`BufferedReader.readline()`时,如果还没有足够的数据行在缓冲区中,此方法将阻塞直到有足够的数据行可供读取。
需要注意的是,阻塞是一种同步的行为,这意味着当程序在执行`BufferedReader.readline()`时会暂停执行,直到特定条件满足或者发生异常。因此,在使用`BufferedReader.readline()`方法时,我们需要注意处理可能的阻塞情况,例如使用多线程处理输入流或者设置适当的超时时间来避免长时间的阻塞。
阅读全文