gpt4 book ai didi

读取具有极长单行的文件时发生 Java 内存不足错误

转载 作者:行者123 更新时间:2023-12-01 18:03:44 24 4
gpt4 key购买 nike

我们的应用程序需要读取单行文件,并且该单行包含大量数据。我们正在做的是,从文件中读取该行并将其存储在字符串中,并使用 - 标记该字符串并存储到列表中。从该列表中需要检查一些条目。

方法如下

public bollean checkMessage(String filename){
boolean retBool = true;
LinkedList tokenList;
int size;
String line = "";
try {
File file = new File(filename);
FileInputStream fs = new FileInputStream(file);
InputStreamReader is = new InputStreamReader(fs);
BufferedReader br = new BufferedReader(is);
while ((line = br.readLine()) != null) {
line.trim();
tokenList = tokenizeString(line, "-");
if (tokenList == null) {
retBool = false;
resultMsg = "Error in File.java "
}
if (retBool) {
retBool = checkMessagePart(tokenList);
}
}
}

错误发生在 line , while ((line = br.readLine()) != null)

错误是

Caused by: java.lang.OutOfMemoryError: Java heap space
at java.util.Arrays.copyOf(Arrays.java:2367)
at java.lang.AbstractStringBuilder.expandCapacity(AbstractStringBuilder.java:130)
at java.lang.AbstractStringBuilder.ensureCapacityInternal(AbstractStringBuilder.java:114)
at java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:535)
at java.lang.StringBuffer.append(StringBuffer.java:322)
at java.io.BufferedReader.readLine(BufferedReader.java:363)
at java.io.BufferedReader.readLine(BufferedReader.java:382)

实际上增加堆大小并没有起作用。尝试读取的文件大小超过 1GB。也尝试以字节 block 的形式读取,但是将读取的数据添加到 StringBuilder 或列表时将再次生成 MemoryError

最佳答案

如果问题是您无法将文件读取为字符串,则不要这样做。使用其他方法逐个读取它。最简单的方法是使用 Scanner使用正确的分隔符(在您的情况下为“-”)。如果您发现其性能不足,您可以求助于实现您自己的 BufferedReader 版本,其中“行”由该字符而不是正常值分割。

关于读取具有极长单行的文件时发生 Java 内存不足错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38566200/

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