回推缓冲区溢出 - 但我的缓冲区尚未满?

时间:2011-05-24 11:49:10

标签: java buffer-overflow

我正在实现一个语法阅读器作为家庭作业的衍生物,我一次只能读取一个XML文件。我的目标是获取我通过实验室任务的代码,并改进结构和设计。

我有SyntaxReader继承自PushbackReader,其中包含readAndExpect(char c)trimWhitespace()readUntilChar(char c)等额外方法。然后我有一个继承自XMLSyntaxReader的{​​{1}},并添加了SyntaxReaderreadAttribute()等功能(后者对树中的孩子来说是递归的......)。

我基本上只是从我的实验室作业中获取了工作代码并将其粘贴到此方法的适当位置。但是,当我尝试阅读第一个孩子时,我得到的是readNode()我无法弄清楚。

这是我的XML文件的开头:

IOException: Pushback buffer overflow

我已调试并观察语法阅读器在子标记开头的<Biosfar namn="Liv">ar allt som fortplantar sig <Rike namn="Vaxter"> etc... 处成功读取。此时,<R确认它是子标记,按顺序读取最后两个字符(XMLSyntaxReaderR)并调用<进行解析子节点。当我尝试读取readNode()时会发生异常。

在调试器中,我还验证了<的私有pos变量确实设置为PushbackReader,但我无法弄清楚原因。我已经解析了一整行文字 - 为什么这些字符仍然没有计算?

我发布了我的代码,但它确实很长,并且在我不确定我的确切实现是否相关之前是一样的。如果是,请指向我可以上传片段的地方,我会分享所有代码。

2 个答案:

答案 0 :(得分:4)

PushbackReader缓冲区的默认大小不是1吗?当你按下第二个字符时,这会导致这个问题。如果增加缓冲区的大小会发生什么?

答案 1 :(得分:0)

我得到了这个:

byte[] bytes = programaFonte.getBytes();

PushbackReader reader = new PushbackReader(new InputStreamReader(new ByteArrayInputStream(bytes)),bytes.length);