我一直在尝试读取一个 2GB 的 XML 文件。我遵循不同的方法来读取它,但每种方法都会给出 OutOfMemoryError
我什至尝试将 eclispe 中的堆大小最大值增加到 4GB,最小堆大小增加到 2GB,但问题仍然存在。我该如何解决这个问题?我不想使用任何第三方 libaray。
以下是我迄今为止尝试过的代码
String str = new String(Files.readAllBytes(Paths.get(pathname)),
StandardCharsets.UTF_8);
和
try(Scanner scanner = new Scanner(new File(pathname))) {
while ( scanner.hasNextLine() ) {
String line = scanner.nextLine();
}
}
最佳答案
每个字符至少使用 2 个字节,并且还需要内存进行处理。我会给它更多的内存,比如 24 GB,看看它真正需要多少。
注意Java 9+具有压缩字符串,可以减少消耗。
更好的方法是在读取文件时使用 SAX 解析器来处理文件,这将占用一小部分内存。
关于java - 在java中读取2GB xml文件时出现OOM错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52465342/