这是有关正确实现Java的InputStream
接口的问题。
我有一个不支持标记/重置功能的实现。因此,它从markSupported
方法返回false。在这种情况下,我应该如何实现mark
方法?也就是说,如果有人告知mark
尽管不支持该标记,那么应该如何处理呢?
两个明显的选择是(a)忽略它,什么也不做;或(b)抛出UnsupportedOperationException
。 API JavaDocs不提供首选指南。
答案 0 :(得分:1)
我建议像InputStream
类那样做,即
mark()
:如javadoc“ InputStream的mark方法不执行任何操作。”中所述。
reset()
:如javadoc中所述抛出I / O异常:为类InputStream重置的方法除了抛出IOException外什么都不做。” Javadoc链接:https://docs.oracle.com/javase/7/docs/api/java/io/InputStream.html
答案 1 :(得分:1)
看起来JDK中的典型实现什么都不做,并且如果调用reset
则抛出IOException:
java.util.zip.InflaterInputStream:
public synchronized void mark(int readlimit) {
}
public synchronized void reset() throws IOException {
throw new IOException("mark/reset not supported");
}
java.io.PushbackInputStream:
public synchronized void mark(int readlimit) {
}
public synchronized void reset() throws IOException {
throw new IOException("mark/reset not supported");
}