1

我偶尔会从解析大量 XML 文件的过程中得到标题中的错误。

文件本身似乎没问题,并且在产生错误的相同文件上再次运行该过程就可以了。

异常发生在调用XMLReader.parse(InputStream is)

这可能是解析器中的错误(我使用piccolo)吗?还是与我如何打开文件流有关?

不涉及多线程。

Piccolo 在当时似乎是个好主意,但我真的没有使用它的好借口。我将尝试切换到默认的 SAX 解析器,看看是否有帮助。

更新:它没有帮助,我发现 Piccolo 对于某些工作负载要快得多,所以我回去了。

4

3 回答 3

3

我可能应该告诉这个故事的结尾:这是一个愚蠢的错误。有两个进程:一个生成 XML 文件,另一个读取它们。阅读器只是扫描目录并尝试处理它看到的每个新文件。

每隔一段时间,阅读器就会在生产者完成写入之前检测到文件,因此它合法地引发了“文件意外结束”的异常。因为我们在这里讨论的是小文件,所以这个事件非常罕见。当我来检查时,生产者已经完成了文件的编写,所以对我来说,解析器似乎在抱怨什么。

我写了“不涉及多线程”。显然,这是非常具有误导性的。

一种解决方案是将文件写入其他位置并仅在完成后将其移动到受监视的文件夹中。更好的解决方案是使用适当的消息队列。

于 2012-08-30T05:43:25.603 回答
2

我在 XMLBeans 下遇到了与 Picolo 类似的事情。快速谷歌后,我发现了以下帖子:

XMLBEANS-226 - 异常“null 后文件意外结束”

该帖子指出,使用 Apache Commons(v1.4 及更高版本)类org.apache.commons.io.input.AutoCloseInputStream可以解决此异常(我自己没有尝试过,抱歉)。

于 2012-06-18T21:49:06.960 回答
0

这是多线程场景吗?即你是否同时解析多个。

您没有在 JRE 中使用默认 XML 解析器的任何特殊原因?

于 2009-07-02T06:02:01.837 回答