我正在学习如何使用InputStream。我试图用大关的BufferedInputStream,但是当我尝试重置我有这些异常:缓冲输入流标记读取限制
java.io.IOException: Resetting to invalid mark
我想这意味着我的标记读取限制设置错误。实际上我不知道如何在mark()中设置读取限制。我试过像这样:
is = new BufferedInputStream(is);
is.mark(is.available());
这也是错误的。
is.mark(16);
这也引发同样的异常。 我如何知道我应该设置的读取限制?因为我将从输入流中读取不同的文件大小。
我的个人需要?不要使用标记 - 虽然我确定有标记,但我还没有找到一个好的理由。通常情况下,这首先是处理不善的一个标志。我倾向于认为流不是流,除非我正在处理它最原始的形式。我宁愿紧紧包装它,以获取其信息,将其打包,然后将该包发送到应用程序的某处进行处理。 – corsiKa 2011-12-22 03:54:48
@glowcoder感谢您的评论。正如我前面所说,我是使用InputStream的新手。实际上我试图使用输入流两次。我认为这是做到这一点的方法。设置标记和重置。你有没有其他建议如何实现这一目标? – 2011-12-22 04:05:57
马克是这样工作的。假设您的输入流最终会成为“A B C D E”。你到目前为止处理'A B'。 (记住,你不知道什么是'下游')。你标记它。然后再阅读一些内容,就会得到'C D E'。你看看它,然后说:“等等,我不能在这种模式下处理'C D E'!”无论出于何种原因所以你说:“我真的希望我可以再次处理'C D E'......你可以,因为你'编辑'它。您只需将reset()放回原来的位置即可,您可以像以前那样再次读取它。 – corsiKa 2011-12-22 06:06:02