我有一个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/