为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

达令说 2022-05-25 17:29:54
这是一个关于正确实现JavaInputStream接口的问题。我有一个不支持标记/重置功能的实现。因此,它从该markSupported方法返回 false。在这种情况下我应该如何实现该mark方法?也就是说,如果有人mark在被告知不支持标记的情况下打电话,应该如何处理?两个明显的选择是(a)忽略它,什么也不做;或 (b) 投掷UnsupportedOperationException。API JavaDocs 不提供任何首选指南。
查看完整描述

2 回答

?
元芳怎么了

TA贡献1798条经验 获得超7个赞

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

}


查看完整回答
反对 回复 2022-05-25
?
精慕HU

TA贡献1845条经验 获得超8个赞

我建议像上课InputStream那样做,即

  • mark():什么都不做,如javadoc“InputStream的标记方法什么都不做”中所述。

  • reset():抛出一个 I/O 异常,如 javadoc “类 InputStream 的方法重置除了抛出一个 IOException 之外什么都不做。”

Javadoc 链接:https ://docs.oracle.com/javase/7/docs/api/java/io/InputStream.html


查看完整回答
反对 回复 2022-05-25
  • 2 回答
  • 0 关注
  • 89 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信