我正在尝试构建一个简单的解析器,并且由于InputStream没有类似peek的方法,我正在使用mark和reset。 但我怀疑连续的标记,使之前的标记无效。是这样的吗? 是否可以做类似
的事情foo.mark(1);
...
foo.mark(2);
...
foo.reset();
...
foo.reset();
如果没有,是否有其他方法来模拟这个或偷看方法?
THX。
答案 0 :(得分:4)
您的怀疑是正确的,InputStream.mark(int readlimit)方法将允许您将流重新定位到最后标记的位置,前提是您已读取少于readlimit
个字节。如果你想要一个“可窥探的”InputStream,你可能需要考虑PushbackInputStream。它没有明确提供peek功能,但它允许你“推回”你读过的字节。
答案 1 :(得分:1)
标记不嵌套。
如果要多次重新读取流,可能需要将流(部分)复制到字节数组中,并生成ByteArrayInputStream
。您仍然不能有多个标记,但可以有多个ByteArrayInputStream
。 (或者忘记ByteArrayInputStream
并直接从数组中挑选字节。)