我正在实现一个语法阅读器作为从作业分配的副产品,我一次只阅读一个XML文件。我的目标是采用我通过实验任务的代码,并改进结构和设计。推回缓冲区溢出 - 但我的缓冲区还未满?
我有一个SyntaxReader
从PushbackReader
继承,其中有一些额外的方法,如readAndExpect(char c)
,trimWhitespace()
和readUntilChar(char c)
。然后,我有一个XMLSyntaxReader
从SyntaxReader
继承,并增加了像readAttribute()
和readNode()
功能(后者是递归树中的孩子们......)。
我已经基本上只是从我的实验室任务所采取的工作代码,并将其粘贴到这种做法合适的地方。但是,当我尝试阅读第一个孩子时,我收到了一个IOException: Pushback buffer overflow
,我无法弄清楚。
这是我的XML文件的开头:
<Biosfar namn="Liv">ar allt som fortplantar sig
<Rike namn="Vaxter"> etc...
我已经调试并观看了语法,阅读器处子标签开始成功地读取所有的方式通过<R
。在这一点上,XMLSyntaxReader
证明了它是一个子标签,unreads最后两个字符(R
和<
,按顺序),并呼吁readNode()
解析子节点。当我尝试未读<
时发生异常。
在调试器中,我也验证了PushbackReader
的私人pos
变量确实设置为0
,但我想不出为什么。我已经解析了一整行文字 - 为什么这些角色还不算数?
我会发布我的代码,但它是相当漫长的,正如我以前工作过的相同的我不知道我的确切的实现是相关的。如果是这样,请指向某处我可以上传代码片段,然后我将分享所有代码。
我不认为这能不看到一些代码来回答。请确保您确实使用指定正确缓冲区大小的构造函数(默认值为1)。 – 2011-05-24 12:20:45
@乔恩:如果我只包括我的代码部分,构造可能一直没在那里反正,因为我不认为这是相关的(我没有缓冲区大小的想法 - 我认为这是整个流...),所以如果我已经显示了我的*完整*代码,那么它只会在那里,我认为它太过长。正如你和Adrian Mouat所建议的那样,问题出在缓冲区大小上,并且可以在没有看到我的实际代码的情况下找到并解决它=) – 2011-05-24 16:05:59