为什么要使用java.io.Filter*而不是扩展具体的流实现?

为什么要使用java.io.Filter*而不是扩展具体的流实现?,java,stream,Java,Stream,java.io.Filter*类型的用途是什么?i、 e.FilterInputStream,FilterReader 通过简单地重写特定方法并调用super(),是否可以向具体的流类(如FileInputStream)添加任何过滤逻辑?i、 e.super.read() 据我所知,过滤器类型提供的唯一工具最多只能是感知的——也就是说,它们记录(一目了然)了一个事实,即开发人员真正需要的是一种将一些附加逻辑(过滤)应用于现有流实现的方法 我缺少什么?这是一个,然后您可以使用它来过滤扩展输入流的任

java.io.Filter*类型的用途是什么?i、 e.
FilterInputStream
FilterReader

通过简单地重写特定方法并调用
super()
,是否可以向具体的流类(如
FileInputStream
)添加任何过滤逻辑?i、 e.
super.read()

据我所知,过滤器类型提供的唯一工具最多只能是感知的——也就是说,它们记录(一目了然)了一个事实,即开发人员真正需要的是一种将一些附加逻辑(过滤)应用于现有流实现的方法

我缺少什么?

这是一个,然后您可以使用它来过滤扩展输入流的任何内容。这意味着您对它的使用具有很高的灵活性


如果您扩展了一个输入流,那么无论何时您想要过滤一些东西,您都需要扩展该类型的输入流。因此,如果您想要过滤每种类型的输入流,那么您需要为每种类型的输入流提供一个过滤器扩展类。使用decorator模式,您只需要一个接受输入流的实现,就可以对它们进行过滤

我明白了,所以,我可以创建一个java.io.Filter*实现,并将其过滤逻辑用于多个
InputStream
sextactly,因此如果您想要过滤TCP流或文件流,您将只有一个过滤器实现。(注意,输入和输出需要单独的实现)