如何检查输出流是否已关闭

2022-09-01 06:49:51

无论如何,是否可以检查输出流是否已关闭,而无需尝试写入它并捕获?IOException

例如,请考虑以下人为方法:

public boolean isStreamClosed(OutputStream out){
    if( /* stream isn't closed */){
        return true;
    }else{
        return false;
    }
}

你可以用什么来代替?/* stream isn't closed */


答案 1

底层流可能不知道它已关闭,直到您尝试写入它(例如,如果套接字的另一端关闭它)

最简单的方法是使用它并处理如果它关闭时会发生什么,而不是先测试它。

无论你测试什么,你总是有机会得到一个IOException,所以你无法避免异常处理代码。添加此测试可能会使代码复杂化。


答案 2

不幸的是,OutputStream API没有像.isClosed()

因此,我只知道一种明确的方法:创建包装任何其他输出流的类,并按如下方式实现其方法:StatusKnowingOutputStreamclose()

public void close() {
    out.close();
    closed = true;
}

现在添加方法isClosed()

public boolean isClosed() {
    return closed;
}

推荐