java - 处理具有大量数据的 XML 文件

标签 java xml

我正在开发具有以下要求的应用程序 -

  1. 从服务器下载 ZIP 文件。
  2. 解压缩 ZIP 文件,从该文件中获取内容(XML 格式)并将其转换为字符串。
  3. 将此内容传递到另一个方法进行解析和进一步处理。

现在,我担心的是 XML 文件可能很大,比如“100MB”,而我的 JVM 内存只有 512MB,所以我怎样才能将这些内容放入 block 中并通过解析,然后插入数据到 PL/SQL 表中。

由于可以同时运行多个请求,并且考虑到 512MB 的内存,最好的处理方法是什么。

如何将数据放入 block 中并将其作为流传递以进行 XML 解析。

最佳答案

Java 的 XMLReader是一个 SAX2 解析器。 DOM 解析器读取整个 XML 文件并创建一个(通常是大的)数据结构(通常是一棵树)来表示其内容,SAX 解析器允许您注册一个处理程序,当 XML 文档的片段被调用时,该处理程序将被调用。认可。在该回调代码中,您只能保存足够的数据来执行您需要的操作——例如您可能会保存所有最终将作为数据库中的一行的字段,插入该行,然后丢弃数据。使用这种类型的设计,您的程序的内存消耗较少取决于文件大小,而是取决于单个逻辑数据项的复杂性和大小(在您的情况下,数据将成为数据库中的一行)。

即使您确实使用了 DOM 样式的解析器,事情也可能没有您预期的那么糟糕。 XML 非常冗长,因此(取决于它的结构等)一个 100 MB 的文件通常只代表 10-20 MB 的数据,而低至 5 MB 的数据也不会特别罕见或令人难以置信。

关于java - 处理具有大量数据的 XML 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2480593/

相关文章:

java - 将某些 Flink 操作优先于其他操作

java - 使用mockito 来模拟具有通用方法的服务

java - 静态变量和实例变量之间的性能差异

打字时Android按钮重叠文本布局

C# 将简单对象序列化为 xml。没有命名空间没有空值

c# - 使用 XmlDocument 读取 GPX 文件

xml - 内在值(value)的Xdt变换

xml - DB2 存储过程优化器未使用最有效的索引

java - 返回带有 Jersey 的数组

java - 在速度模板中转义引号