我可以在Java中对InputStream执行连续的标记操作

时间:2011-05-19 16:51:05

标签: java inputstream reset

我正在尝试构建一个简单的解析器,并且由于InputStream没有类似peek的方法,我正在使用mark和reset。 但我怀疑连续的标记,使之前的标记无效。是这样的吗? 是否可以做类似

的事情
foo.mark(1);
...
foo.mark(2);
...
foo.reset();
...
foo.reset();

如果没有,是否有其他方法来模拟这个或偷看方法?

THX。

2 个答案:

答案 0 :(得分:4)

您的怀疑是正确的,InputStream.mark(int readlimit)方法将允许您将流重新定位到最后标记的位置,前提是您已读取少于readlimit个字节。如果你想要一个“可窥探的”InputStream,你可能需要考虑PushbackInputStream。它没有明确提供peek功能,但它允许你“推回”你读过的字节。

答案 1 :(得分:1)

标记不嵌套。

如果要多次重新读取流,可能需要将流(部分)复制到字节数组中,并生成ByteArrayInputStream。您仍然不能有多个标记,但可以有多个ByteArrayInputStream。 (或者忘记ByteArrayInputStream并直接从数组中挑选字节。)