关闭 FilterWriter 后为什么它可以工作?

After closing FilterWriter why it is working?

在下面的代码中,我在向 FilterWriter 写入任何内容之前使用 close() 方法关闭了 FilterWriter 并且在流关闭后,如果我们尝试调用这些方法FilterWriter 上的 write()flush() 应该会导致抛出 IOException

但这里调用 write() 方法工作正常,没有抛出异常。为什么?

import java.io.FilterWriter;
import java.io.StringWriter;
import java.io.Writer;

public class MyClass {
    public static void main(String[] args) {
        try {
            Writer writer = new StringWriter(10);
            FilterWriter filterWriter = new FilterWriter(writer) {};
            filterWriter.close();
            filterWriter.write(65);
            String str = writer.toString();
            System.out.println(str);
        } catch (Exception e) {
            System.out.println("Exception: " + e.toString());
        }
    }
}

输出:

A

FilterWriter的close()函数调用底层writer的close()函数。 在您的情况下,底层编写器的类型为 StringWriter 并且根据 javadoc 的 Stringwriter here

的 close() 函数

Closing a StringWriter has no effect.

因此您不会遇到任何错误。

这是因为关闭 FilterWriter 会调用底层 Writerclose 方法,这是您在构造函数中传递的方法。

您的基础 Writer 是一个 StringWriter,其 close implementation does nothing at all. (which is also what the documentation for the close method 表示)。

因此,当您在调用 close 后尝试写入它时,实际上不会抛出任何异常。