0

我有一个相当大的 CSV 文件(~.5Mb,16000 行,6 列),我目前正在将其作为 Android 应用程序的一部分导入到数组中。我将 CSV 存储在资产文件夹中,并在每次使用时重新导入。导入现在需要 7 或 8 秒(每行约 0.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. 加快整个过程的最佳方法是什么?

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

4

0 回答 0