У меня есть текстовый файл объемом 60 МБ, через который моя программа ищет определенный идентификатор и извлекает некоторый связанный текст. И я должен повторить этот процесс для более 200 идентификаторов. Вначале я использовал цикл, чтобы циклически перебирать строки файла и искать идентификатор, а затем извлекать связанный текст, но он занимает слишком много времени (~ 2 мин). Поэтому вместо этого теперь я ищу способ загрузить весь файл в память, затем отыскивать идентификаторы и связанный с ними текст; Я предполагаю, что это должно быть быстрее, чем доступ к жесткому диску более чем в два раза. Поэтому я написал следующий код для загрузки файла в память:Загрузка файла в память (Java)?
public String createLocalFile(String path)
{
String text = "";
try
{
FileReader fileReader = new FileReader(path);
BufferedReader reader = new BufferedReader(fileReader);
String currentLine = "";
while((currentLine = reader.readLine()) != null)
{
text += currentLine;
System.out.println(currentLine);
}
}
catch(IOException ex)
{
System.out.println(ex.getMessage());
}
return text;
}
К сожалению, сохранение текста файла в переменную Струнный занимает очень много времени. Как загрузить файл быстрее? Или есть лучший способ выполнить ту же задачу? Спасибо за любую помощь.
Edit: Вот ссылка на файл https://github.com/MVZSEQ/denovoTranscriptomeMarkerDevelopment/blob/master/Homo_sapiens.GRCh38.pep.all.fa
Типичная линия выглядит как:
>ENSP00000471873 pep:putative chromosome:GRCh38:19:49496434:49499689:1 gene:ENSG00000142534 transcript:ENST00000594493 gene_biotype:protein_coding transcript_biotype:protein_coding\
MKMQRTIVIRRDYLHYIRKYNRFEKRHKNMSVHLSPCFRDVQIGDIVTVGECRPLSKTVR\
FNVLKVTKAAGTKKQFQKF\
Где ENSP00000471873
это идентификатор и текст, который я бы извлекая является
MKMQRTIVIRRDYLHYIRKYNRFEKRHKNMSVHLSPCFRDVQIGDIVTVGECRPLSKTVR\
FNVLKVTKAAGTKKQFQKF\
Вы не получаете доступ к жесткому диску 200 раз. Никакая нормальная операционная система не работает таким образом. Поместите файл в какую-то разумную структуру, например, в массив строк. –
Если вы пытаетесь сохранить какую-то «базу данных» в текстовом файле, возможно, вам следует использовать DATABASE –
. Вместо StringButler вы можете использовать 'StringBuilder' (возможно, компилятор уже конвертирует ваш код для его использования). –