+-

我有一个60 MB的文本文件,程序可通过该文件搜索特定的ID并提取一些相关的文本.我必须重复200个ID的过程.最初,我使用循环来循环浏览文件的各行,查找ID,然后提取相关文本,但是这花费的时间太长(约2分钟).因此,现在,我正在寻找一种将整个文件加载到内存中,然后从中搜索我的ID和相关文本的方法.我想那应该比访问硬盘200次要快.所以我写了以下代码将文件加载到内存中:
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;
}
不幸的是,将文件的文本保存到String变量中需要花费很长时间.如何更快地加载文件?还是有更好的方法来完成相同的任务?谢谢你的帮助.
编辑:这是文件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是ID,我要提取的文本是
MKMQRTIVIRRDYLHYIRKYNRFEKRHKNMSVHLSPCFRDVQIGDIVTVGECRPLSKTVR\
FNVLKVTKAAGTKKQFQKF\
最佳答案
同意其他大多数意见. 60 MB对于今天的记忆来说不是太大.但是,浪费时间的地方几乎肯定是在将每行追加到越来越可怕的单个字符串上.制作线阵.
更好的是,在阅读时将ID文本和“相关文本”分开,以使以后的ID搜索更快.哈希表将是理想的.
点击查看更多相关文章
转载注明原文:正在将文件加载到内存中(Java)? - 乐贴网