有点模糊的问题,我提前道歉。
我正在使用Java构建Parsers一书来构建一个小解析器的标记部分。它使用PushbackReader和其中包含的String作为首先检测给定字符串的第一个字符的方法,然后将PushbackReader发送到适当的状态(该状态然后将该标记构建为包含String的单独对象)。
如果在流中没有找到其他使用字符,则似乎仅使用PushbackReader。然后它读取最后一个字符。
使用CharBuffer的追加可以做同样的事情吗?优选地,不需要预定义缓冲区的东西。
答案 0 :(得分:1)
根据我所看到的,他选择了PushbackReader有两个原因:
例如,使用WhitespaceState.nextToken方法,他正在跳过空格字符。他拉下一个角色然后看着它。如果它是一个空白字符,他会拉下一个字符。当他最终拉出一个不是空格的字符时,他会把它放回到流中,这样下一个查看流的方法就会查看正确的字符。
虽然你可以用更简单的东西替换它,只有两个方法,read()和unread(),你必须记住这样做你可能会
使用PushbackReader,他通过输入读取和处理一次,他不必缓冲整个输入,也不必存储未读()字符并单独传递它们