gpt4 book ai didi

java - 为什么尝试在 FileInputStream 上使用 mark() 和 reset() 会生成 IOException?

转载 作者:行者123 更新时间:2023-11-30 08:11:54 25 4
gpt4 key购买 nike

我试图了解 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com