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

这是一个关于正确实现JavaInputStream接口的问题。

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

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


达令说
浏览 90回答 2
2回答

元芳怎么了

看起来 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");}

精慕HU

我建议像上课InputStream那样做,即mark():什么都不做,如javadoc“InputStream的标记方法什么都不做”中所述。reset():抛出一个 I/O 异常,如 javadoc “类 InputStream 的方法重置除了抛出一个 IOException 之外什么都不做。”Javadoc 链接:https ://docs.oracle.com/javase/7/docs/api/java/io/InputStream.html
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java