FilterOutputStream是否正常执行写入



Oracle文档中说:

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

从偏移量为off的指定字节数组中写入len字节到该输出流。FilterOutputStream调用的写入方法要输出的每个字节上有一个参数的写入方法。

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

我有两个问题:

  1. 在这个页面上,我找到了使用FilterOutputStream装饰FileOutputStream的代码,并将正常输出写入文件。为什么FilterOutputStream在每个字节上都调用底层流的write()方法,而它可以在底层流上调用相同的重载并使操作更快
  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. 我怀疑这只是一个拼写错误。

相关内容

  • 没有找到相关文章

最新更新