У меня есть некоторый код Java, который работает вполне ожидаемым образом, но это занимает некоторое время - несколько секунд, даже если задание просто перебирает массив.
Входной файл представляет собой файл Fasta, как показано на изображении ниже. Файл, который я использую, имеет размер 2,9 МО, и есть несколько других файлов Fasta, которые могут занимать до 20 МО.
И в коде я пытаюсь перебрать его группами по три, например: AGC TTT TCA ... и т. д. На данный момент код не имеет функционального смысла, но я хочу добавить каждую аминокислоту к эквивалентной группе оснований. Пример :
AGC - Ser / CUG Leu / ... и т.д.
Так что не так с кодом? и есть ли способ сделать это лучше? Любая оптимизация? Перебор всей строки занимает некоторое время, может быть, всего несколько секунд, но нужно найти лучший способ сделать это.
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
public class fasta {
public static void main(String[] args) throws IOException {
File fastaFile;
FileReader fastaReader;
BufferedReader fastaBuffer = null;
StringBuilder fastaString = new StringBuilder();
try {
fastaFile = new File("res/NC_017108.fna");
fastaReader = new FileReader(fastaFile);
fastaBuffer = new BufferedReader(fastaReader);
String fastaDescription = fastaBuffer.readLine();
String line = fastaBuffer.readLine();
while (line != null) {
fastaString.append(line);
line = fastaBuffer.readLine();
}
System.out.println(fastaDescription);
System.out.println();
String currentFastaAcid;
for (int i = 0; i < fastaString.length(); i+=3) {
currentFastaAcid = fastaString.toString().substring(i, i + 3);
System.out.println(currentFastaAcid);
}
} catch (NullPointerException e) {
System.out.println(e.getMessage());
} catch (FileNotFoundException e) {
System.out.println(e.getMessage());
} catch (IOException e) {
System.out.println(e.getMessage());
} finally {
fastaBuffer.close();
}
}
}