这是我想要优化的代码中的循环。它将arg [0]作为文件名并生成子串但不是所有子串,例如,鼠标为小鼠,冰,ce,e 。这就是getAllUniqueSubset()
的作用。
BufferedReader in = new BufferedReader(new FileReader(args[0]));
new File("./indexof"+args[0]).mkdirs();
BufferedWriter out = null;
SubString sub = new SubString();
String s;
while ((s = in.readLine()) != null) {
String[] list = s.split(" ");
for(int i=0;i<list.length;i++){
ArrayList<String> substrings = sub.getAllUniqueSubset(list[i].replaceAll("[^a-zA-Z]", "").toLowerCase());
for(String sb:substrings){
out = new BufferedWriter(new FileWriter("./indexof"+args[0].toLowerCase()+"/"+sb.charAt(0)+".txt",true));
out.write(sb);
out.write(" ");
out.write(Integer.toString(lineNumber));
out.newLine();
out.flush();
}
}
lineNumber++;
}
in.close();
out.close();
这段代码从文件中获取上面提到的子字符串,然后分类到charAt(0)的每个文件中.txt
这需要大约70000毫秒来处理500kb文件
但是当文件变得足够大,如500mb时,时间会变得很大
所以我的问题是
答案 0 :(得分:0)
这使BufferedWriters保持打开状态。删除了同花顺。添加了一个较大的缓冲区大小。 - 处理生产线时效率更高。
BufferedReader in = new BufferedReader(new FileReader(args[0]));
new File("./indexof"+args[0]).mkdirs();
BufferedWriter[] outs = new BufferedWriter[26];
SubString sub = new SubString();
String s;
int lineNumber = 1;
while( (s = in.readLine()) != null ){
s = s.replaceAll("[^\\sa-zA-Z]", "").toLowerCase();
String[] list = s.split("\\s+");
for( String sl: list ){
ArrayList<String> substrings = sub.getAllUniqueSubset(sl);
for( String sb: substrings ){
BufferedWriter out = outs[sb.charAt(0)-'a'];
if( out == null ){
out = outs[sb.charAt(0)-'a'] =
new BufferedWriter(new FileWriter("./indexof"+args[0]+"/"+sb.charAt(0)+".txt",true), 1024*16);
}
out.write(sb);
out.write(" ");
out.write(Integer.toString(lineNumber));
out.newLine();
}
}
lineNumber++;
}
in.close();
for( BufferedWriter out: outs ){
if( out != null ) out.close();
}
修改使用http://textfiles.com/programming/bourne1.txt进行测试,这是一个 597768字节文本文件。完成1(一)秒。