gpt4 book ai didi

java - 在内存中保留一个大字符串

转载 作者:行者123 更新时间:2023-11-30 06:49:05 25 4
gpt4 key购买 nike

我有以下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(..) 处出现内存不足错误。

有没有更高效、尤其是内存消耗更少的方法?对我来说,内存比速度更重要。或者我是否需要重新思考我的整个方法并逐段阅读?

最佳答案

这可能不会有太大帮助,也许可以让您处理更大的文件。通过使用以下内容,您将创建比所需更多的字符串:

row + System.lineSeparator().trim() 位于末尾。您可以通过将代码稍微更改为以下方式来使用更少的内存:

exchange.getIn().setBody(Files.lines(path, Charset.forName("UTF-8")).collect(Collectors.joining(System.lineSeparator())); 

虽然我不太明白为什么你要逐行读取文件,然后用行分​​隔符再次连接行。

此外,要使用正则表达式处理大文件,使用 Scanner 类并使用 Scanner 的 findWithinHorizo​​n 方法(具有足够大的范围来满足您的需求)可能很有用。当检索到匹配项时,扫描仪将自动前进。

关于java - 在内存中保留一个大字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43158353/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com