我是 Java 新手。我有这个 2 GB 的 xml 文件,我需要解析它的数据并将其存储到数据库中。
StackOverflow 上的某个人建议我将 Dom4j 用于长 xml 文件。解析做得很好,但返回的文档(由 Dom4j 提供)非常长,并且在迭代时会将所有 DOM 对象加载到内存(堆)中。
这会导致内存不足异常。有人可以帮助我如何避免此类错误吗?我们在 Java 中是否存在一些 Java 中按需堆分配和沉积的现象?
我是 Java 新手。我有这个 2 GB 的 xml 文件,我需要解析它的数据并将其存储到数据库中。
StackOverflow 上的某个人建议我将 Dom4j 用于长 xml 文件。解析做得很好,但返回的文档(由 Dom4j 提供)非常长,并且在迭代时会将所有 DOM 对象加载到内存(堆)中。
这会导致内存不足异常。有人可以帮助我如何避免此类错误吗?我们在 Java 中是否存在一些 Java 中按需堆分配和沉积的现象?
如果您需要解析大型 XML 文件(并且添加到 Java 堆中并不总是有效),您需要一个 SAX 解析器,它允许您解析 XML 流而不是将整个 DOM 树加载到内存中。
您也可以查看SAXDOMIX
SAXDOMIX 包含可以在解析 XML 文档期间将 SAX 事件或 DOM 子树转发到您的应用程序的类。该框架定义了允许应用程序在 SAX 解析过程中获取 DOM 子树的简单接口。处理后,所有 DOM 子树都可以进行垃圾收集。这解决了 DOM 可伸缩性问题。