OutOfMemoryError:尝试读取大文件时的Java堆空间

use*_*312 7 java string algorithm file

我正在尝试读取大文件(大约516mb),它有18行文本.我试图自己写下代码,并在尝试读取文件时在第一行代码中出错:

 try(BufferedReader br = new BufferedReader(new FileReader("test.txt"))) {
        String line;
        while ((line = br.readLine()) != null) {
            String fileContent = line;
        }
 }
Run Code Online (Sandbox Code Playgroud)

注意:文件存在且大小约为516mb.如果有另一种更安全,更快捷的阅读方法,请告诉我(即使它会换行). 编辑: 这里我尝试使用扫描仪,但它持续时间更长,然后给出相同的错误

try(BufferedReader br = new BufferedReader(new FileReader("test.txt"))) {
    Scanner scanner = new Scanner(br);
    while(scanner.hasNext()){
        int index = Integer.parseInt(scanner.next());
        // and here do something with index
    }
}
Run Code Online (Sandbox Code Playgroud)

我甚至将文件分成1800行,但没有修复

Uwe*_*nus 1

使用 增加堆大小-Xmx

对于您的文件,我建议设置-Xmx1536m至少为 516M,因为加载时文件大小会增加。Java 内部使用 16 位来表示一个字符,因此包含 10 个字节文本的文件大约需要 10 个字节。20 个字节String(除非使用具有许多组合字符的 UTF-8)。