Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 用海量数据处理XML文件_Java_Xml - Fatal编程技术网

Java 用海量数据处理XML文件

Java 用海量数据处理XML文件,java,xml,Java,Xml,我正在处理一个有以下要求的应用程序- 从服务器下载ZIP文件 解压缩ZIP文件,将该文件中的内容(XML格式)转换为字符串 将此内容传递到另一个方法以进行解析和进一步处理 现在,我关心的是XML文件可能很大,比如说“100MB”,而我的JVM只有512MB的内存,所以我如何才能将这些内容分成块并进行解析,然后将数据插入PL/SQL表中 由于可以同时运行多个请求,并且考虑512MB的内存,因此最好的处理方法是什么 如何将数据分成块并作为流传递给XML解析。任何SAX解析器都应该工作,因为它不像DO

我正在处理一个有以下要求的应用程序-

  • 从服务器下载ZIP文件
  • 解压缩ZIP文件,将该文件中的内容(XML格式)转换为字符串
  • 将此内容传递到另一个方法以进行解析和进一步处理
  • 现在,我关心的是XML文件可能很大,比如说“100MB”,而我的JVM只有512MB的内存,所以我如何才能将这些内容分成块并进行解析,然后将数据插入PL/SQL表中

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


    如何将数据分成块并作为流传递给XML解析。

    任何SAX解析器都应该工作,因为它不像DOM解析器那样将整个XML文件加载到内存中。

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


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

    重复另请参阅:另请参阅谢谢您的回复。但我的主要要求是,我不想将所有数据都加载到内存中,而是必须将XML文件的一小部分分块读取,并将其传递给其他应用程序进行处理,以避免出现内存不足的错误。@Manish:这就是我(以及其他给您答复的人)的原因推荐使用SAX风格的解析器——它从不尝试将整个文件加载到内存中。嗨,Jerry,实际上根据我的要求,我必须从服务器下载文件并将XML数据转换成字符串,我必须将该字符串传递给正在解析XML的其他应用程序。我可以有某种机制,在从服务器下载文件的过程中,我可以将这些数据块传递给其他应用程序吗?