我有一个InputStream对象,其中包含XML格式的数百万个文件信息(名称,创建日期,作者等)。我已经尝试使用String方法将其转换为IOUtils.copy,但是由于该信息的大小很大,因此在运行几分钟后会抛出java.lang.OutOfMemoryError

不能增加JVM内存,因为我从中收集信息的文件数量一直在增加。那么有人可以建议我该怎么做才能解决这个问题?

最佳答案

您遇到的问题正是基于流的IO存在的原因,将大量数据消耗到内存之前根本就不可行。

将您的流解析为...一个流!有关使用SAX进行基于流的XML解析的更多信息,请参见Oracle tutorials

XMLReader xmlreader =
    SAXParserFactory.newInstance().newSAXParser().getXMLReader();
xmlreader.setContentHandler(new ContentHandler() {
    ...
});

xmlreader.parse(new InputSource(myInputStream));

关于java - 将InputStream对象转换为String的最佳方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25806441/

10-10 11:39