我有一个相当大的 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;
}
以下是我的问题:
它所花费的时间是我应该期待的吗?
如果不是,为什么要花这么长时间?
加快整个过程的最佳方法是什么?
我没有使用 SQL 数据库的经验,但这听起来像是我应该研究的东西。