ли будет использовать Path#forEachLine (который, как я понимаю, использует принцип BufferReader'а)?
Либо же есть какие-то более хитрые, но оптимизированные решения?
Важно уточнить, что я планирую последовательное чтение.
Если речь про JVM, то forEachLine подойдет. Но иногда удобнее использовать что-то вроде lineSequence с последующими операторами filter, map, reduce и пр.
Чем это решение отличается по производительности?
по своей сути ничем. я лишь про удобство использования
Смотря в каком смысле. Если по памяти, то наверное да, если по скорости, то скорее всего нет
Ну смотри, мне хорошо бы быстро читать, но при этом не загружать весь буфер в память.
Проблема с построчным чтением в том, что там буфер используется довольно неэффективно. Кроме того, не известно, где там переносы строк. Если это бинарник, там их вовсе может не быть.
Нет, это не бинарный файл. Это csv файл. Касаемо неэффективности буфера, то тут есть тонкость. Важно в первую очередь уточнить какой именно volatile storage используется. Чтение сегментов (будь то HDD, будь то SDD) должно быть атомарным с точки зрения диска. Потому неясно как при построчно чтении можно оптимизировать буфер.
Я про буфер IO. В CSV длина строки тоже может быть огромная
Если строка огромная, то тогда это другой вопрос. Но в контексте моей проблемы как минимум несколько десятков строк должны помещаться в одну дисковую страницу
лучше всего поможет, если файлы на ssd будут
да вроде бы нет подводных камней у стандартного forEachLine
Последовательный поиск все равно там и там примерно идентичен. Операционные системы умеют подготавливать головку диска для чтения следующего сектора. Но да, SSD должен быть шустрее в случае параллельной обработки. Что в моем случае не вариант.
есть, кстати, вариант абстрагироваться от этого, взяв какую-нибудь джавовую библиотеку про стриминг csv
не знаю, надо специально искать бенчмарки и по ним выбирать
а почему вы задумываетесь настолько глубоко?
Вопрос не про дисковую страницу, а про буффер в памяти. По хорошему, там надо вообще делать memory-mapping, но тут всегда надо думать, а насколько оно вам надо
Обсуждают сегодня