Oracle文档中说:
write(byte[]b,int off,int len)抛出IOException
从偏移量为off的指定字节数组中写入len字节到该输出流。FilterOutputStream调用的写入方法要输出的每个字节上有一个参数的写入方法。
请注意,此方法不调用其底层的write方法输入具有相同参数的流。FilterOutputStream的子类应该提供该方法的更有效的实现。
我有两个问题:
- 在这个页面上,我找到了使用
FilterOutputStream
装饰FileOutputStream
的代码,并将正常输出写入文件。为什么FilterOutputStream
在每个字节上都调用底层流的write()
方法,而它可以在底层流上调用相同的重载并使操作更快 - 为什么底层流输入流
谢谢。
-
我相信重点是,如果你想要一个非常简单的过滤器,你可以覆盖
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)
抽象,以强制子类找出如何合理有效地处理调用。 -
我怀疑这只是一个拼写错误。