1

Oracle文档说:

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

将指定字节数组中的 len 个字节写入此输出流。FilterOutputStream 的 write 方法在每个字节上调用一个参数的 write 方法进行输出。

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

我有两个问题:

  1. 页面上,我找到了FilterOutputStream用于修饰的代码FileOutputStream,并将正常输出写入文件。为什么在每个字节上FilterOutputStream调用write()底层流的方法,当它能够在底层流上调用相同的重载并使操作更快?
  2. 为什么是底层流输入流?

谢谢。

4

1 回答 1

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. 这只是一个错字,我怀疑。

于 2013-07-20T09:07:11.127 回答