Olá.
Seguinte. Preciso ler dados de um CSV. O problema é que são muitos dados. Variam entre 35.000 e 130.000 mas a média é 65.535. Cada dado desse é um double, normalmente 5 casas total, sendo 3 decimais. Eu preciso pegar esse double e transformar ele em um inteiro (com 5 casas decimais, elimenando a vírgula).
Eu tenho 3 linhas no CSV que eu leio com inormaçoes com labels (Ex: altura,1.67) e a quarta linha desse CSV é ‘dados’. A partir de dados, cada linha é um dado. Esses dados são salvos num array de int (Não, eu não posso mudar isso no momento, talve futuramente, dê pra colocar isso numa Collection, mas no momento preciso usar array de int).
O código que lê os pontos é mais ou menos assim (trecho do código):
try {
BufferedReader in = new BufferedReader(new FileReader(dataFile));
String nextLine = "";
countData = 0;
int [] points = new int[size];
while((nextLine = in.readLine())!=null){
try{
points[countData] = (int) (Double.parseDouble(nextLine.trim())*1000.0);
countData++;
}catch(NumberFormatException e){
continue; //ignora os dados não convertindos (nunca acontece, mas caso aconteça, ignora)
}
} catch (FileNotFoundException e) {
logger.error("Error reading data. "+dataFile.getName()+" not found");
return null;
}catch(IOException ioe){
logger.error("Error reading data. Could not read "+dataFile.getName());
return null;
}catch(NoSuchElementException e){
logger.error("Error reading data. Malformed file");
return null;
}
Eu não sei se é possível, mas tem alguma forma de melhorar a performace desse código? Com 65.353 dados, ele leva uma média de 1.3 segundos para popular esse array.
E também se tem como melhorar a performance disso com Collections ou outros meios. Como disse, no momento preciso usar array de int, mas futuramente poderei mudar isso.
Desde já agradeço.