【发布时间】:2015-06-07 20:54:22
【问题描述】:
我已经阅读了一些关于使用 SAX 解析器在 java 中解析 XML 文件优于使用 DOM 的优势的文章。 最吸引我的一个(如here 所讨论的)是
Sax 适用于大型 XML 文件,SAX 解析器不会将 XML 文件作为一个整体加载到内存中。
但现在我已经编写了一个解析器,使用 SAX 从 XML 文件中为一个几乎 1.4 GB 的大文件派生实体,它会生成以下异常。
org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 1; The parser has encountered more than "64,000" entity expansions in this document; this is the limit imposed by the application.
如果整个文件没有加载到内存中,内存有什么问题。
我该如何解决这个问题?
【问题讨论】:
-
这不一定是实际的内存限制,而是针对像 this one 这样的 DOS 攻击的保护措施。如果您的输入 XML 合法包含那么多实体,您可以在解析器中增加该限制。查看它的文档。
-
你建议我用这个保护措施做什么?
-
我以为我是这么说的。
-
我应该看一下JVM的文档吗?