从服务器android读取大文本文件

时间:2011-12-14 21:45:53

标签: android

我在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) {
    }

}

3 个答案:

答案 0 :(得分:2)

你确定3到4分钟是可以实现的吗?我问,因为你必须:

1)下载文件内容 2)解析文件内容 3)插入数据库

其中一些操作可以同时进行,但#1高度依赖于网络速度,而2/3高度依赖于您可用的系统资源类型。

相反,我们可以问为什么您需要将所有这些数据下载到手机并将其放入数据库中?您的应用程序查询托管在包含.txt的Web服务器上的数据库是否存在问题?你有什么样的.txt访问权限?你可以在服务器上修改它,这样可以更快地完成解析吗?

简而言之,我认为我们需要更多数据来分析您的问题。你能发布一些.txt中的行例和你用来解析它的代码吗?

答案 1 :(得分:1)

文本文件具有高度可压缩性,因此请使用Android上提供的gzip压缩。

其他选项包括:

  • 将您的数据集拆分为多个文件,然后再使用gzip将它们单独下载

  • 在安装过程中为数据库播种并创建同步方法以更新较新的记录并使移动版本更新。\

  • 使用高效的数据库设计删除冗余数据,只下载所需内容

<强>更新

澄清:

  1. 压缩服务器上的txt文件。
  2. 更改您的Android代码,将zip文件下载到设备上的本地存储。
  3. 将本地副本解压缩到本地存储。
  4. 您现在应该在本地存储上拥有txt文件的副本,以便删除本地zip文件。

    1. 读取本地txt文件并插入数据库记录。
    2. 这种方法的主要区别是

      一个。您正在下载较少的数据  湾你的下载不会被sql插入中断。

      您还可以尝试使用事务来提高插入速度,如Android SQLite database: slow insertion

      中所述
      db.beginTransaction();
      for (entry : listOfEntries) {
          db.insert(entry);
      }
      db.setTransactionSuccessful();
      db.endTransaction();
      

答案 2 :(得分:0)

  1. 确保内部存储空间或SD卡中有20mb的空间。
  2. 一次性下载文件,如果压缩则更好。 (因为它的重量约为3-4mb)
  3. 然后你可以打开它并解析它。使用多次插入行的查询(检查INSERT sqlite语法)。
  4. 删除文件。
  5. 这种方法也可以让你恢复中断下载,这也不错。