Проблема заключается в следующем:
Несколько больших файлов (более 20 МБ) содержат последовательности ДНК. Я использую следующий код для подключения к этим файлам:
fc = FileChannel.open(file);
// Create a read-only CharBuffer on the file
ByteBuffer bbuf = fc.map(FileChannel.MapMode.READ_ONLY, 0, 256);
CharBuffer cbuf = Charset.forName("8859_1").newDecoder().decode(bbuf);
Я знаю точные начальные и конечные позиции подпоследовательности для извлечения, что позволило бы мне использовать метод
cbuf.subSequence(start, end);
Однако, у больших файлов есть терминаторы строки, нарушающие последовательность ДНК, и они считаются символом. Не рекомендуется предполагать фиксированную ширину строк в файле. Какой эффективный способ «пропустить» терминаторы строки, но при этом сохранить эффективность использования памяти с помощью Charbuffer или чего-то подобного?
Я пытался использовать жадные квантификаторы с регулярными выражениями, но ограничители строки снова нарушают результат. Я хочу избежать загрузки содержимого файла в полном объеме любой ценой. Разве нельзя трактовать символы новой строки как «несуществующие»?