这是因为 mark() 和 reset() 协同工作的原因,如文档中所示。
公共无效标记(int readlimit):标记此输入流中的当前位置。对该方法的后续调用将此流重新定位在最后标记的位置,以便后续读取重新读取相同的字节。reset
如果您有多个线程共享相同的 InputStream,如果这两种方法无法同步,则可能会导致问题。
更新到评论
java.io.InputStream
是一个抽象类,所以我认为同步的更适合继承 InputStream 作为提示的类。方法 和 将仅在返回 true 时使用。并在类中返回 false。mark()
reset()
markSupported()
java.io.InputStream#markSupported()
/**
* Tests if this input stream supports the <code>mark</code> and
* <code>reset</code> methods. Whether or not <code>mark</code> and
* <code>reset</code> are supported is an invariant property of a
* particular input stream instance. The <code>markSupported</code> method
* of <code>InputStream</code> returns <code>false</code>.
*
* @return <code>true</code> if this stream instance supports the mark
* and reset methods; <code>false</code> otherwise.
* @see java.io.InputStream#mark(int)
* @see java.io.InputStream#reset()
*/
public boolean markSupported() {
return false;
}