我试图了解 mark()
和 reset()
的实现是如何完成的,以便能够在 ByteArrayInputStream
上覆盖它和其他类,但不在类 FileInputStream
上。我们知道这两个类都扩展了抽象类 InputStream
,它是两个方法的父类。这不是 final方法,因为我们可以在类 ByteArrayInputStream
上使用它们。使用什么技术来防止 FileInputStream
覆盖其他方法而不是这两个方法,即。 mark()
和 reset()
?
最佳答案
您可以覆盖任何父类中的任何 protected 或公共(public)的非 final方法:
class A extends FileInputStream {
public A(File file) throws FileNotFoundException {
super(file);
}
@Override
public synchronized void mark(int readlimit) {
super.mark(readlimit);
}
@Override
public long skip(long n) throws IOException {
return super.skip(n);
}
}
但我想我没答对您的问题?
FileInputStream.reset() 抛出 IOException,因为此类不支持标记和重置:
public synchronized void reset() throws IOException {
throw new IOException("mark/reset not supported");
}
但是 mark() 不会抛出 IOException:
public synchronized void mark(int readlimit) {}
此行为也记录在 Javadoc 中.
关于java - 为什么尝试在 FileInputStream 上使用 mark() 和 reset() 会生成 IOException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30783549/