我正在学习如何使用输入流。我试图对 BufferedInputStream 使用标记,但是当我尝试重置时,出现以下异常:
java.io.IOException: Resetting to invalid mark
我认为这意味着我的标记读取限制设置错误。我实际上不知道如何在mark()中设置读取限制。我尝试这样:
is = new BufferedInputStream(is);
is.mark(is.available());
这也是错误的。
is.mark(16);
这也会引发相同的异常。
我如何知道我应该设置什么读取限制?因为我将从输入流中读取不同大小的文件。
mark
如果您需要检查超出您所读取内容的几个字节来决定下一步做什么,那么有时会很有用,然后您重置回标记并调用期望文件指针位于该逻辑部分开头的例程输入。我不认为它真的有其他用途。
如果你查看 javadoc缓冲输入流 http://docs.oracle.com/javase/6/docs/api/java/io/BufferedInputStream.html它说
标记操作会记住输入流中的一个点,而重置操作会导致在从所包含的输入流中获取新字节之前重新读取自最近的标记操作以来读取的所有字节。
这里要记住的关键是一旦您在流中标记了一个位置,如果您继续阅读超过标记长度,则标记将不再有效,并且重置调用将会失败。所以mark只适用于特定情况,而在其他情况下则没有多大用处。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)