Мне нужно обработать файл CSV, читая его построчно (только для чтения). Переменное число последовательных строк представляет для меня логическую c единицу работы (поскольку не все из них имеют одинаковый формат). Таким образом, один CSV содержит X из этих логических единиц.
Я хотел бы ввести параллелизм посредством использования одного потока на область, чтобы каждый поток мог начать читать свои строки независимо и обрабатывать их до конца своей области (возможно, Я мог бы выполнить этот синтаксический анализ файла сначала последовательно и сохранив в памяти смещения, которые ограничивают каждую область).
Моя идея состоит не в том, чтобы хранить каждую полную область строк в памяти, а просто начать чтение с определенной позиции и обслуживания строки буферизованным способом .
Было бы хорошей идеей с точки зрения производительности использовать один FileChannel на поток, начинающий чтение в их соответствующей начальной позиции? Как каждый FileChannel может прочитать свои назначенные строки в зашифрованном виде? Я видел много примеров, но я думаю, что они все загружают всю область данных в ByteBuffer, и я не ищу этого.
Важно отметить, что обработка каждой строки включает в себя несколько проверок и удаленный доступ к БД, так что это может немного задержать.
Спасибо.