不支持mark时如何正确实现InputStream.mark()

时间:2019-01-30 09:08:55

标签: java inputstream

这是有关正确实现Java的InputStream接口的问题。

我有一个不支持标记/重置功能的实现。因此,它从markSupported方法返回false。在这种情况下,我应该如何实现mark方法?也就是说,如果有人告知mark尽管不支持该标记,那么应该如何处理呢?

两个明显的选择是(a)忽略它,什么也不做;或(b)抛出UnsupportedOperationException。 API JavaDocs不提供首选指南。

2 个答案:

答案 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");
}