我有一个InputStream
对象,其中包含XML
格式的数百万个文件信息(名称,创建日期,作者等)。我已经尝试使用String
方法将其转换为IOUtils.copy
,但由于该信息的大小非常大,因此在运行几分钟后会抛出java.lang.OutOfMemoryError
。< / p>
增加JVM
内存不是一种选择,因为我收集信息的文件数量正在不断增加。那么有人可以建议我该怎么做来解决这个问题吗?
答案 0 :(得分:2)
您遇到的问题是非常原因基于流的IO存在,在使用之前将大量数据投入内存是不可行的。
将您的信息流解析为......一个信息流!有关使用SAX进行基于流的XML解析的更多信息,请参阅Oracle tutorials
。
XMLReader xmlreader =
SAXParserFactory.newInstance().newSAXParser().getXMLReader();
xmlreader.setContentHandler(new ContentHandler() {
...
});
xmlreader.parse(new InputSource(myInputStream));