我在Android应用程序中工作,从服务器(20 MB)逐行读取大文本文件, 每行后插入sqlite DB,从这一行中提取一些数据等等。
问题是,此应用程序大约需要一个小时才能完成读取此文件。 注意 : 这个文件中有400,000行。我怎么能加快这个操作需要3到4分钟? 谢谢你的帮助。
public void readArData() {
try {
URL url = new URL("http://10.0.2.2/xy.txt");
BufferedReader in = new BufferedReader(new
inputStreamReader(url.openStream()));
String str;
while ((str = in.readLine()) != null) {
// insert into Sqlite DB
}
in.close();
} catch (MalformedURLException e) {
} catch (IOException e) {
}
}
答案 0 :(得分:2)
你确定3到4分钟是可以实现的吗?我问,因为你必须:
1)下载文件内容 2)解析文件内容 3)插入数据库
其中一些操作可以同时进行,但#1高度依赖于网络速度,而2/3高度依赖于您可用的系统资源类型。
相反,我们可以问为什么您需要将所有这些数据下载到手机并将其放入数据库中?您的应用程序查询托管在包含.txt的Web服务器上的数据库是否存在问题?你有什么样的.txt访问权限?你可以在服务器上修改它,这样可以更快地完成解析吗?
简而言之,我认为我们需要更多数据来分析您的问题。你能发布一些.txt中的行例和你用来解析它的代码吗?
答案 1 :(得分:1)
文本文件具有高度可压缩性,因此请使用Android上提供的gzip压缩。
其他选项包括:
将您的数据集拆分为多个文件,然后再使用gzip将它们单独下载
在安装过程中为数据库播种并创建同步方法以更新较新的记录并使移动版本更新。\
使用高效的数据库设计删除冗余数据,只下载所需内容
<强>更新强>
澄清:
您现在应该在本地存储上拥有txt文件的副本,以便删除本地zip文件。
这种方法的主要区别是
一个。您正在下载较少的数据 湾你的下载不会被sql插入中断。
您还可以尝试使用事务来提高插入速度,如Android SQLite database: slow insertion
中所述db.beginTransaction();
for (entry : listOfEntries) {
db.insert(entry);
}
db.setTransactionSuccessful();
db.endTransaction();
答案 2 :(得分:0)
这种方法也可以让你恢复中断下载,这也不错。