Oracle documentation说:
write(byte [] b,int off,int len)抛出IOException
从offset off处开始写入指定字节数组中的len个字节 到此输出流。 FilterOutputStream调用的write方法 每个字节输出一个参数的write方法。
请注意,此方法不会调用其底层的write方法 带有相同参数的输入 stream 。 FilterOutputStream的子类 应该提供更有效的方法实现。
我有两个问题:
FilterOutputStream
来装饰FileOutputStream
,并将正常输出写入文件。为什么FilterOutputStream
在每个字节上调用基础流的write()
方法,当它能够在底层流上调用相同的重载并使操作更快时?感谢。
答案 0 :(得分:2)
我认为重点在于,如果你想要一个非常简单的过滤器,你可以覆盖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)
抽象,强制子类来确定如何处理合理有效地打电话。
我怀疑这只是一个错字。