Java:FilterInputStream与其他流相比有哪些优点和用途

Lut*_*her 18 java inputstream outputstream stream

我一直在阅读InputStream,FileInputStream,ByteArrayInputStream以及它们的使用方式似乎非常清楚(输出流也是如此).

我正在努力的是理解FilterInputStream和FilterOutputStream的用法:

  • 与其他流类相比,使用它有什么好处?
  • 我应该什么时候使用它?
  • 请提供理论解释和基本示例.

eri*_*son 19

FilterInputStreamDecorator模式的一个例子.

必须扩展此类,因为它的构造函数是protected.派生类将添加其他功能,但仍然暴露了一个基本接口InputStream.

例如,a BufferedInputStream提供对底层输入流的缓冲以使读取数据更快,并且在DigestInputStream消耗时计算数据的加密散列.

你可以使用此功能添加到现有的依赖于代码InputStreamOutputStreamAPI.例如,假设您使用了一些将数据保存到的库OutputStream.数据越来越大,因此您需要添加压缩.您可以修改应用程序,而不是修改数据持久性库,以便它"装饰"当前使用的流创建的流ZipOutputStream.该库将使用该流,就像它使用缺少压缩的旧版本一样.

  • 好的,但是 BufferedInputStream 和 DigestInputStream 实际上对底层流做了一些事情。FilterInputStream 的作用是什么? (3认同)
  • 没有。基本上,这是扩展子类并覆盖读写功能以添加您可能需要的任何新功能的邀请。当前执行此操作的子类是:BufferedInputStream,CheckedInputStream,CipherInputStream,DataInputStream,DeflaterInputStream,DigestInputStream,InflaterInputStream,LineNumberInputStream,ProgressMonitorInputStream,PushbackInputStream。 (2认同)