【发布时间】:2013-06-11 07:39:06
【问题描述】:
根据this documentation 所说:
void reset()将此流重新定位到上次对该输入流调用
mark方法时的位置。
但是如果 mark() 从未被调用会怎样?它会重置到流的开头(这是我想要的)还是未定义?另外,当我查看markSupported() 的文档时,它说:
测试此输入流是否支持
mark和resetmethods。
所以这也测试了重置,这表明重置也可能不被支持。如果我在自己的重置代码中关闭并重新打开流,在这种情况下是否更安全?
【问题讨论】:
-
你试过了吗? (指的是“但是如果从未调用过 mark() 会发生什么?”)
-
针对特定实现尝试一些示例与针对标准工作不同。是的,我知道它目前可以工作,但如果我用另一个实现扩展该类,它可能无法工作。
-
我明白了,所以你想让代码独立于特定的流实现,对吧?如果我没记错的话,只有在支持标记时重置才有意义。而且我记得很清楚,如果它被支持并且标记没有被调用,那么 reset 将抛出一个 IOException 或倒回开始。
-
谢谢。所以我想如果
markSupported()返回false,我应该重新打开。您应该将此作为答案发布。 :) -
您是否考虑阅读Javadoc? “如果自创建流以来尚未调用方法标记,或者自上次调用标记以来从流中读取的字节数大于上次调用时标记的参数,则可能会引发 IOException。”
标签: java inputstream