【发布时间】:2019-01-20 14:58:16
【问题描述】:
在我尝试读取之前,Java 是否有任何可靠的方法来确定 java.io.InputStream 是否已关闭?
我的用例是我有一个方法,它接受 InputStream 参数并从中读取。该方法在自己的线程中运行,如果输入流关闭,我想终止线程。
InputStream 实现了Closeable,它提供了一个close() 方法,但显然无法查询实例是否已经关闭。
尝试从关闭的InputStream 读取会抛出IOException,但这可能有其他原因,并且接口合约中没有任何内容说明这种情况是否是永久性的,或者在某些情况下是否有机会它会在某个时候消失。
我的方法的调用者可以提供他们希望的InputStream 的任何子类,因此不能选择依赖特定的子类行为。
还有其他想法吗?
【问题讨论】:
-
如果您使用
Channel,则有isOpen()。 -
InputStream是一个抽象类。在您使用的子类中,您应该重写方法available(),如this API 文档中所述... -
@zlakad 我有一个采用
InputStream参数的方法,调用者可以将他们希望的InputStream的任何子类传递给该方法(只是编辑了我的问题以反映这一点)。 -
好吧,@erickson 答案的最后一部分解释了你的问题。
标签: java inputstream