1
我有以下的Java代码:保持较大的字符串存储
Path path = Paths.get("largefile.txt2");
if (Files.exists(path))
exchange.getIn().setBody(Files.lines(path, Charset.forName("UTF-8")).map(row -> row + System.lineSeparator()).collect(Collectors.joining()).trim());
//OOM error!
我基本上需要读取整个文件在内存中做基于一些搜索性判据各种正则表达式处理和分裂。这些文件可能大到300 MB - 1GB大。
我有这个问题,因为它适用于大约100 MB的文件,但是一旦达到200或更多,我会发现与堆大小相关的内存不足错误.setBody(..)
。
是否有更高效的内存消耗方法?记忆对我来说比速度更重要。还是我需要重新思考我的整个方法并逐一阅读?
“减少内存消耗的方法”不要将字符串保留在内存中,不要使用正则表达式。也许解析器会起作用? – markspace
我也许可以逃避不把字符串保存在内存中,尽管这意味着重新开始。我仍然不得不使用正则表达式,因为我需要通过各种参数来“清理”数据。你指的是哪种解析器? –
对于大数据,您需要基于流的方法,这意味着您只需在内存中随时保存一小段数据。我认为你真正的问题是不得不用一个巨大的字符串调用'setBody()'。你需要找到一种方法将输出零散地发送到“交换”。 – Bohemian