У меня сложилось впечатление, что этот инструмент полностью считывает файл с результирующими строковыми объектами, хранящимися в памяти
Нет.Использование памяти зависит от того, как вы решите взаимодействовать с вашим CSVParser
объектом.
Javadoc для CSVParser
решает эту проблему в явном виде.
Я быстро взглянул на исходный код, и, действительно, кажется, что он читает из входного источникакусок за раз, а не все сразу.Но посмотрите сами .
Разбор записи мудрый
В разделе Разбор записи мудрый , он показывает, как постепенно читать одну CSVRecord
навремя зацикливанием Iterable
, то есть CSVParser
.
CSVParser parser = CSVParser.parse(csvData, CSVFormat.RFC4180);
for (CSVRecord csvRecord : parser) {
...
}
Разбор в память
В отличие от Разбор в память В разделе показано использование CSVParser::getRecords
для загрузки всех объектов CSVRecord
в List
одновременно в памяти.Поэтому очевидно, что очень большой входной файл может выбить память на компьютере с ограниченными возможностями.
Reader in = new StringReader("a;b\nc;d");
CSVParser parser = new CSVParser(in, CSVFormat.EXCEL);
List<CSVRecord> list = parser.getRecords();