我正在开发具有以下要求的应用程序 -
- 从服务器下载 ZIP 文件。
- 解压缩 ZIP 文件,从该文件中获取内容(XML 格式)并将其转换为字符串。
- 将此内容传递到另一个方法进行解析和进一步处理。
现在,我担心的是 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/