PushbackReader等价物

时间:2012-04-20 21:34:08

标签: java parsing io nio

有点模糊的问题,我提前道歉。

我正在使用Java构建Parsers一书来构建一个小解析器的标记部分。它使用PushbackReader和其中包含的String作为首先检测给定字符串的第一个字符的方法,然后将PushbackReader发送到适当的状态(该状态然后将该标记构建为包含String的单独对象)。

如果在流中没有找到其他使用字符,则似乎仅使用PushbackReader。然后它读取最后一个字符。

使用CharBuffer的追加可以做同样的事情吗?优选地,不需要预定义缓冲区的东西。

1 个答案:

答案 0 :(得分:1)

根据我所看到的,他选择了PushbackReader有两个原因:

  1. 他需要一位能够处理个人角色的读者。
  2. 他需要在流中进行备份,因为在进行标记时,他需要提前查看一个或多个字符,以确定当前字符是否是令牌的一部分。
  3. 例如,使用WhitespaceState.nextToken方法,他正在跳过空格字符。他拉下一个角色然后看着它。如果它是一个空白字符,他会拉下一个字符。当他最终拉出一个不是空格的字符时,他会把它放回到流中,这样下一个查看流的方法就会查看正确的字符。

    虽然你可以用更简单的东西替换它,只有两个方法,read()和unread(),你必须记住这样做你可能会

    1. 读取整个输入,然后处理输入。因此,如果你有一个大文件,你会吃掉内存来存储它。
    2. 将输入作为流读取一次,但存储来自unread()的char并将它们以单独的结构传递。
    3. 使用PushbackReader,他通过输入读取和处理一次,他不必缓冲整个输入,也不必存储未读()字符并单独传递它们