【发布时间】:2014-09-12 10:41:24
【问题描述】:
我有一个InputStream 对象,其中包含XML 格式的数百万个文件信息(名称、创建日期、作者等)。我已经尝试使用IOUtils.copy 方法将其转换为String,但由于该信息的大小非常大,运行几分钟后会抛出java.lang.OutOfMemoryError。
增加JVM 内存不是一种选择,因为我从中收集信息的文件数量会永远增加。那么有人可以建议我应该怎么做才能解决这个问题吗?
【问题讨论】:
-
InputStream的具体实现是什么?例如是ByteArrayInputStream? -
如果输入太大,您的其他选择是 (a) 首先尝试将其 ETL 到数据库中或 (b) 使用 Hadoop 或类似的东西
-
将大量数据转换为一个字符串似乎是错误的方法。你想对字符串做什么?
-
如果您无法将对象放入内存中,请避免需要将其存储在内存中的情况。将其作为流使用。
-
如果数据太大而无法存储在内存中并且您无法增加内存,那么您的选择就会受到限制 - 要么作为流处理,提取您需要的内容,要么将数据保存在某处以供以后访问.
标签: java string inputstream