我一直在尝试读取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();
}
}
答案 0 :(得分:2)
每个字符至少使用2个字节,并且您还需要用于处理的内存。我会给它提供更多的内存(例如24 GB),看看它真正需要多少。
注意Java 9+具有压缩字符串,可以减少消耗。
一种更好的方法是在读取文件时使用SAX解析器来处理文件,这将占用一小部分内存。