【发布时间】:2013-03-05 11:37:19
【问题描述】:
我正在为 Android 设备制作应用程序。我的应用程序中有一个函数,它有 2 个“for 循环”,每个循环 3200 次,访问一个 53 KB 的 .txt 文件(包含 3200 行)并将字符串与每一行进行比较,每次迭代一行。 “for 循环”还包含 BufferedReader()、InputStreamReader()、InputStream() 和 StringTokenizer()。因此,当我在模拟器上运行应用程序时,它处理该功能大约需要 8 秒。这是不可接受的。如何将所需的时间减少到半秒或最多。 1秒?谢谢! 编辑:这是我的程序的一部分,带有 2 个 for 循环:
else if(a==2){
String z="";
try{
InputStream is = getAssets().open("USCOUNTIES.txt");
InputStreamReader iz=new InputStreamReader(is);
BufferedReader bis = new BufferedReader(iz);
int v=0;
v=count("USCOUNTIES.txt");//counts number of lines in the .txt file
//finding no. of counties to be displayed
int counter=0;
String pos;
pos=Integer.toString(position);
try{
for(int i=0;i<v;i++){
z=bis.readLine();
//int x=pos.length();
boolean a;
//using stringtokenizer
StringTokenizer st = new StringTokenizer(z, ",");
String substring;
substring=(String) st.nextElement();
a=substring.equals(pos);
if(a==true){
counter=counter+1;
}
}}catch(Exception e){e.printStackTrace();}
String array1[]=new String[counter];
try{
InputStream ig = getAssets().open("USCOUNTIES.txt");
InputStreamReader ia=new InputStreamReader(ig);
BufferedReader bos = new BufferedReader(ia);
int j=0;
for(int i=0;i<v;i++){
z=bos.readLine();
String[] split = z.split(",");
if(split[0].equals(pos)){
array1[j]=split[1];
j=j+1;
}
}}
catch(Exception e){e.printStackTrace();}
【问题讨论】:
-
老实说,8秒读取3200个文件,每行3200行已经很不错了。
-
它是一个单行 3200 行的文件。并且迭代了 3200 次。你可能有什么建议?我这样做是为了将文件的一些数据放在一个列表中。
-
你为什么要重读同一个文件3200次?
-
嗯,如果是单个文件,为什么要加载 3200 次?只需在循环外加载一次
-
你的文件结构是什么?看到您在文件中迭代完全相同数量的行,我怀疑您可以只迭代一次并将所有内容解析为 Map。
标签: android optimization iteration