如何知道BufferedReader Stream是否已关闭

13 java io bufferedreader

我在Java中有两个线程.

第一个线程正在关闭bufferedreader(br.close())

当第二个线程在同一个阅读器上读取时,我得到了一个 IOException (Stream Closed)

即使我使用,我也会得到这个例外 br.ready()

有没有办法知道流是否已经关闭?

Kat*_*one 8

ready()如果关闭,该方法将抛出异常.但即使您添加了一个封闭的检查方法,只要在调用之间释放锁定(它用于BufferedReader),读取器可能会在您读取时关闭.

我看到三个选择:

  1. 用try/catch块包装你的read调用来处理已关闭的case.
  2. 创建一个BufferedReader扩展的子类close()来设置您自己的变量,该变量可用于检查读取器是否已关闭.这也需要覆盖很多方法,如果你想要它做一些旁边的事情,你可以用一个封闭的阅读器做你想要的任何行为IOException.
  3. 添加一个自己的锁并使用它来关闭阅读器(一个线程)并检查缓冲区是否准备就绪并从中读取.您可以直接为检查设置变量,也可以将调用ready()read()调用分组到同一个同步块中.


Eri*_*lje 1

我认为没有任何方法可以直接调用来判断流是否关闭。

如果您确实需要有两个线程共享此读取器,那么最好的选择可能是让一个线程回调另一个线程,或者设置一个标志来通知它流已关闭,以便另一个线程知道不要尝试从中阅读。