>目标:从文本文件中获取值并将其存储到值中以加载到我的SQLite数据库中。
问题:我的方法效率不高,我需要帮助想出一种更简单的方法。
截至目前,我正在解析如下所示的文本文件。
agency_id,agency_name,agency_url,agency_timezone,agency_lang,agency_phone
1,"NJ TRANSIT BUS","http://www.njtransit.com/",America/New_York,en,""
2,"NJ TRANSIT RAIL","http://www.njtransit.com/",America/New_York,en,""
每次读取逗号时,我都会解析,然后将该值存储到变量中,然后我将使用该变量作为我的数据库值。
这种方法有效且耗时,我必须读入的下一个文本文件有 200 多行代码,我需要找到一种更简单的方法。
AgencyString = readText();
tv = (TextView) findViewById(R.id.letter);
tv.setText(readText());
StringTokenizer st = new StringTokenizer(AgencyString, ",");
for (int i = 0; i < AgencyArray.length; i++) {
size = i; // which value i am targeting in the textfile
//ex. 1 would be agency_id, 2 would be agency_name
AgencyArray[i] = st.nextToken();
}
tv.setText(AgencyArray[size]); //the value im going to store into database value
}
private String readText() {
InputStream inputStream = getResources().openRawResource(R.raw.agency);
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
int i;
try {
i = inputStream.read();
while (i != -1) {
byteArrayOutputStream.write(i);
i = inputStream.read();
}
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
return byteArrayOutputStream.toString();
}
首先,为什么这是一个问题?我并不是要用一个问题来回答你的问题,但需要更多的背景来理解你需要以什么方式来提高你正在做的事情的效率。应用程序是否由于解析文件而感知到延迟,或者由于在 UI 线程上运行而存在更严重的 ANR 问题?除非其他代码中存在一些未显示的瓶颈,否则老实说,我怀疑您是否会比目前更快地阅读和标记它。好吧,实际上,毫无疑问,您可能可以;但是,我认为这更多的是设计应用程序的情况,以便获取和解析大数据所涉及的延迟不会被用户感知或引起刺激。我自己的应用程序解析这样的大量文件,它确实需要几分之一秒,但由于整个应用程序和 UI 的设计,它不会出现问题。另外,您是否使用探查器查看了什么需要时间?而且,您是否在没有附加调试器的情况下在真实设备上运行它?将调试器连接到真实设备或使用模拟器会大大增加执行时间几个订单。
我假设您需要在通过网络接收此文件类型后对其进行解析,而不是与应用程序捆绑在一起并且只需要解析一次。
您可以将 SQLite 数据库与应用程序捆绑在一起,而不是在文本文件中表示它。看看这个问题的答案