为什么导入CSV需要这么长时间?如何加快速度?

时间:2012-07-24 03:21:44

标签: android csv

我有一个相当大的CSV文件(〜.5Mb,16000行,6列),我目前作为Android应用程序的一部分导入到数组中。我将CSV存储在assets文件夹中,并在每次使用时重新导入它。导入需要7或8秒(每行约.47毫秒)。

以下是我在CSV中使用的代码:

         @Override
         protected ArrayList<Car> doInBackground(Void... voids) {
            ArrayList<Car> toReturn = new ArrayList<Car>(); 

            try {

                BufferedReader CSVFile = new BufferedReader(new InputStreamReader(CarChooser.this.getAssets().open(CSV_NAME)));
                String dataRow = CSVFile.readLine();
                Car car;
                while (dataRow != null){
                    // split on the comma only if that comma has zero, or an even number of quotes in ahead of it
                    String[] dataArray = dataRow.split(",(?=([^\"]*\"[^\"]*\")*[^\"]*$)");
                    if(dataArray.length != 6) throw new IllegalStateException("Row length should be 6. Row length = " + dataArray.length);

                    int year = Integer.parseInt(dataArray[0]);
                    String make = Utils.removeQuotes(dataArray[1]);
                    String model = Utils.removeQuotes(dataArray[2]);
                    float mpgCty = Float.parseFloat(dataArray[3]);
                    float mpgHwy = Float.parseFloat(dataArray[4]);
                    float mpgCmb = Float.parseFloat(dataArray[5]);

                    car = new Car(year, make, model, mpgCty, mpgHwy, mpgCmb);

                    toReturn.add(car);

                    dataRow = CSVFile.readLine(); 
                }
                CSVFile.close();
            } catch (IllegalStateException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }

            return toReturn;
         }

以下是我的问题:

  1. 是时候考虑我应该期待什么了?

  2. 如果没有,为什么需要这么长时间?

  3. 加快整个过程的最佳方法是什么?

  4. 我没有SQL数据库的经验,但这听起来像我应该研究的东西。

0 个答案:

没有答案