Я ищу быстрый способ прочитать примерно 150 Мб спектральных данных, которые у меня есть, в программу, которую я пишу.В настоящее время данные хранятся в текстовом файле (.dat), а их содержимое хранится в формате, подобном следующему:
489.99992 490.000000.011780.01409
, где первые N значений представляют значения x и разделеныпробелами и последними N значениями являются значения y, разделенные символами новой строки.(например, x1 = 489,99999, x2 = 490,00000, y1 = 0,01178, y2 = 0,01409).
Я написал следующий синтаксический анализатор,
private void parse()
{
FileReader reader = null;
String currentNumber = "";
int indexOfIntensity = 0;
long startTime = System.currentTimeMillis();
try
{
reader = new FileReader(FILE);
char[] chars = new char[65536];
boolean waveNumMode = true;
double valueAsDouble;
//get buffer sized chunks of data from the file
for(int len; (len = reader.read(chars)) > 0;)
{
//parse through the buffer
for(int i = 0; i < len; i++)
{
//is a new number if true
if((chars[i] == ' ' || chars[i] == '\n') && currentNumber != "")
{
try
{
valueAsDouble = Double.parseDouble(currentNumber);
}catch(NumberFormatException nfe)
{
System.out.println("Could not convert to double: " + currentNumber);
currentNumber = "";
continue;
}
if(waveNumMode)
{
//System.out.println("Wavenumber: " + valueAsDouble);
listOfPoints.add(new Tuple(valueAsDouble));
}else
{
//System.out.println("Intensity: " + valueAsDouble);
listOfPoints.get(indexOfIntensity).setIntensityValue(valueAsDouble);
indexOfIntensity++;
}
if(chars[i] == '\n')
{
waveNumMode = false;
}
currentNumber = ""; //clear for the next number
continue;
}
currentNumber += chars[i];
}
}
} catch (IOException e) {
e.printStackTrace();
}
try
{
reader.close();
} catch (IOException e)
{
e.printStackTrace();
}
long stopTime = System.currentTimeMillis();
System.out.println("Execution time: " + ((stopTime - startTime) / 1000.0) + " seconds");
}
, но для завершения этого требуется около 50 секундфайл 150mb.Для справки, мы используем другую часть программного обеспечения, которая делает это примерно за полсекунды (однако она использует свой собственный тип файла).Я готов использовать другой тип файла или что-то еще, если это приводит к сокращению времени выполнения.Как я могу ускорить это?
Заранее спасибо