Java中FilterOutputStream
的实际用法是什么?
来自javadocs:
此类是过滤输出流的所有类的超类。这些流位于已存在的输出流(基础输出流)的顶部,它用作数据的基本接收器,但可能会沿途转换数据或提供其他功能。
对我而言,它似乎与OutputStream
具有相同的方法(可能由于某种原因覆盖了它们?)。什么样的数据"转换"它提供什么,什么时候可以在自己的Java应用程序中使用它?
答案 0 :(得分:10)
class NonCloseableOutputStream extends FilterOutputStream {
public NonCloseableOutputStream(OutputStream out) {
super(out);
}
@Override
public void close() throws IOException {
// ignore
}
}
现在我的类可以接受OutputStream的任何子类并使其不可关闭。
答案 1 :(得分:3)
类FilterOutputStream本身只是覆盖了OutputStream的所有方法,其中的版本将所有请求传递给基础输出流。
正如您所怀疑的那样,除了使用更有用的实现覆盖方法之外,它没有做太多。
这些类来自Java 1.0,因此可能无法以最佳方式进行设计。但是,如果您需要创建自己的过滤器流(FilterStream
,CheckedInputStream
或{{1}很多事情)。
答案 2 :(得分:1)
CheckedInputStream
看起来对我有用。它根据通过它传递的数据计算校验和。我可以看到自己使用它。
另一个例子是DeflateOutputStream
,它自动处理正确压缩格式的数据。
我想你完全理解它的用途。子类只是在将数据转发到底层流之前操作数据。
答案 3 :(得分:1)
它与OutputStream
具有相同的方法,因为它扩展了OutputStream
。事实上,这是一个非常有用的功能:您可以在预期FilterOutputStream
的任何地方提供OutputStream
。
默认情况下,FilterOutputStream
不会为您提供任何附加功能。正如其Javadoc所述:
FilterOutputStream
的子类可能会进一步覆盖其中一些方法
例如,您可以扩展FilterOutputStream
并覆盖write(int b)
方法,使其写入您提供给它的任何字节,13
或10
除外。这样,您将拥有一个从不包含换行符的输出流。它可能没有任何用处,但它只是一个例子。