有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java过滤流真正做什么?

为什么要使用过滤流?在哪里?我了解到,过滤流将用于将所需信息放入流中。。这是正确的吗?如果是的话,我们如何从流中过滤,以及在哪里使用它

爪哇。木卫一。过滤器

我这里的问题是很难理解为什么我们要使用过滤流,因为我们可以使用其他流来完成大部分工作,对吗


共 (2) 个答案

  1. # 1 楼答案

    我想你说的是java。木卫一。过滤器*(如FilterInputStream)

    如果我们谈论FilterInputStream类,它只是一个围绕InputStream的包装器,什么都不做。对过滤器方法的每次调用都将在包装的InputStream上调用相应的方法。单凭一个人,这是毫无用处的

    假设您需要一个将每个“a”字符转换为“b”的输入流。您可以扩展FilterInputStream并重写read()方法:

    // this code has not been tested
    class ABFilter extends FilterInputStream {
        public ABFilter (InputStream in) {
            super(in);
        }
        @Override
        public int read() {
            int character = super.read();
            if (character == 97)
                return 98;
            return character;
        }
        // similarly implement all other "read()" methods
    }
    

    现在,您可以使用此流包装任何现有流:

    InputStream streamWithA = ...;
    InputStream streamWithoutA = new ABFilter(streamWithA);
    
  2. # 2 楼答案

    这些Filter*类需要能够在运行时扩展类,而不需要知道底层类型。此模式称为装饰器或包装器

    http://en.wikipedia.org/wiki/Decorator_pattern

    以BufferedInputStream为例。如果没有包装器,每个InputStream都需要多个版本。比如说,

      BufferedInputStream extends InputStream ...
      BufferedFileInputStream extends FileInputStream ...
      BufferedByteArrayInputStream extends ByteArrayInputStream ...
    

    现在有了包装器,你所需要的就是

      BufferedInputStream extends FilterInputStream ...