Я реализую программу генерации временных рядов для использования энергии с использованием данных / sys / class.
Эти данные временного ряда должны быть сохранены в файле.
У меня есть класс потока реализация, как показано ниже. У него есть метод getPowerseries (), который возвращает массив значений.
public class PowerTrace extends Thread {
private double power;
private double[] powerSeries;
private boolean running = TRUE;
public void run() {
try {
BufferedReader currentReader = null;
BufferedReader voltageReader = null;
currentReader = new BufferedReader(new InputStreamReader(new FileInputStream(new File("/sys/class/power_supply/battery/current_now"))));
voltageReader = new BufferedReader(new InputStreamReader(new FileInputStream(new File("/sys/class/power_supply/battery/voltage_now"))));
String battline;
String battline1;
while (running) {
if ((battline = currentReader.readLine()) != null && (battline1 = voltageReader.readLine()) != null) {
String[] curr = battline.split("\\s+");
String[] vol = battline1.split("\\s+");
double currentv = Double.parseDouble(curr[0]);
double voltagev = Double.parseDouble(vol[0]);
// Calculate power consumption
power = currentv * voltagev * 10e-12 * -1;
// save in a memory
powerSeries = addX(powerSeries, power);
}
}
}catch(
FileNotFoundException fnf)
{
fnf.printStackTrace();
}catch(IOException io)
{
io.printStackTrace();
}
}
public static double[] addX( double arr[], double x)
{
int i;
int n=arr.length;
double newarr[] = new double[n + 1];
for (i = 0; i < n; i++)
newarr[i] = arr[i];
newarr[n] = x;
return newarr;
}
public double[] getPowerSeries(){
return this.powerSeries;
}
public void terminate(){
running=FALSE;
}
}
И основной класс выглядит следующим образом
public class MyClass {
public static void main(String[] args) {
double[] battReadings=new double[10000000];
powerSeries = new PowerTrace();
// Bound of timeseries 15sec
long t= System.currentTimeMillis();
long end = t+15000;
// Starting thread
powerSeries.start();
// Run for 15 secs as per condition
if(System.currentTimeMillis() > end) {
battReadings=powerSeries.getPowerseries();
powerSeries.terminate();
}
// save battReadings in a file
try {
ObjectOutputStream objOut = new ObjectOutputStream(new
FileOutputStream("timeseries.dat"));
objOut.writeObject(battReadings);
objOut.close();
}
catch (Exception e) {
e.printStackTrace();
}
}
Мне нужны советы и советы по оптимизации, так как это тяжелый поток ввода-вывода, как мне улучшить задание в основном классе?