У меня есть CSV-файл с 12000 строк. В каждой строке есть несколько полей, заключенных в двойные кавычки и разделенных запятой.Одним из этих полей является документ XML, поэтому строка может быть очень длинной .Размер файла составляет 174 МБ.
Вот пример файла:
"100000","field1","field30","<root><data>Hello I have a
line break</data></root>","field31"
"100001","field1","field30","<root><data>Hello I have multiple
line
break</data></root>","field31"
Проблема с этим файлом находится внутри поля xml, которое может иметь один или несколько разрывов строк и, таким образом,может сломать разбор.Цель здесь - прочитать весь файл и применить регулярное выражение, которое заменит все разрывы строк в двойных кавычках пустой строкой.
Следующий код дает мне OutOfMemoryError:
String path = "path/to/file.csv";
try {
byte[] content = Files.readAllBytes(Paths.get(path));
}
catch (Exception e) {
e.printStackTrace();
System.exit(1);
}
Я также пытался прочитать файл, используя BufferedReader и StringBuilder, получил OutOfMemoryError в строке 5000:
String path = "path/to/file.csv";
try {
StringBuilder sb = new StringBuilder();
BufferedReader br = new BufferedReader(new FileReader(path));
String line;
int count = 0;
while ((line = br.readLine()) != null) {
sb.append(line);
System.out.println("Read " + count++);
}
}
catch (Exception e) {
e.printStackTrace();
System.exit(1);
}
Я пытался запустить обе вышеупомянутые программы с разными значениями кучи Java, например -Xmx1024m,-Xmx4096m, -Xmx8092m.Во всех случаях я получил OutOfMemoryError.Почему это происходит, учитывая, что размер файла составляет 174 МБ?