FilterOutpuStream是否正常执行写入?

时间:2013-07-20 09:01:24

标签: java filter stream output java-io

Oracle documentation说:

  

write(byte [] b,int off,int len)抛出IOException

     

从offset off处开始写入指定字节数组中的len个字节   到此输出流。 FilterOutputStream调用的write方法   每个字节输出一个参数的write方法。

     

请注意,此方法不会调用其底层的write方法   带有相同参数的输入 stream 。 FilterOutputStream的子类   应该提供更有效的方法实现。

我有两个问题:

  1. this页面上,我发现代码使用FilterOutputStream来装饰FileOutputStream,并将正常输出写入文件。为什么FilterOutputStream在每个字节上调用基础流的write()方法,当它能够在底层流上调用相同的重载并使操作更快时?
  2. 为什么基础流输入流?
  3. 感谢。

1 个答案:

答案 0 :(得分:2)

  1. 我认为重点在于,如果你想要一个非常简单的过滤器,你可以覆盖write(int)方法,并知道一切都会通过它。这将是低效的,但工作。因此,如果您想要一个过滤掉每个偶数字节的流,您可以轻松地做到这一点:

    public class OddByteOutputStream extends FilterOutputStream
    {
        public OddByteOutputStream(OutputStream output)
        {
            super(output);
        }
    
        @Override
        public void write(int b)
        {
            if ((b & 1) == 1)
            {
                out.write(b);
            }
        }
    }
    

    另一种方法是使write(byte[])委托,但将write(int)write(byte[], int, int)抽象,强制子类来确定如何处理合理有效地打电话。

  2. 我怀疑这只是一个错字。