Данные временных рядов Battery Power с использованием счетчиков / sys / class в Java - PullRequest
0 голосов
/ 05 марта 2020

Я реализую программу генерации временных рядов для использования энергии с использованием данных / 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();
    }   

}

Мне нужны советы и советы по оптимизации, так как это тяжелый поток ввода-вывода, как мне улучшить задание в основном классе?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...