Быстрота вне контекста смысла не имеет. Сам по себе вызов FileReader.readLine() достаточно быстрый, чтобы упираться в скорость передачи данных диска. Если вам не хватает скорости, то надо профилировать код, искать узкие места и оптимизировать их. Если узких мест нет, всё работает на пределе возможностей, то придётся смотреть в сторону распределённой обработки данных.
P.S. Обращение к нативной памяти не быстрее, чем к куче, а вот выделяется она на много медленнее, так что в общем случае direct buffer вам не поможет. Если проблема со скоростью только в аллокациях и от них можно отказаться,, например при сквозной передаче считанного с диска в сеть, то стоит использовать канал и zero copy через DMA.