0

我目前正在运行一个学生项目,我在其中使用 java 接收物理传感器值。

为了转换传感器值(从一个物理暗淡到另一个物理暗淡),每个传感器都有一个特定的输入数据类型(8 位、16 位、双精度等)和一个用于数据转换的数学方程。此配置应存储在数据库中(直接或链接到脚本)

您建议如何实现这样的功能?

转换示例:Sensor0 发送其值,应用程序应查看数据库,Sensor0 的传感器值必须如何转换。它获取转换方程并转换值。(例如输出值计算如下:output_val = (input_val^2) * pi / (2*inputval))

前面的数学方程应以某种方式存储为各种传感器的数据库条目或脚本定义,并应在运行时进行处理。

我的测试系统是带有 java 运行时和 mysql 服务器的 debian x86 计算机。

4

1 回答 1

0

使用方法创建一个Calculation抽象类calculate,然后为每个传感器创建一个继承类,例如Input_1 extends Calculation. 然后序列化Input_1,例如使用Jackson,并将序列化的实例存储在您的数据库中。当你需要执行计算时,读入序列化的实例,反序列化它,然后运行它的calculate方法。

作为替代方案,创建一个执行所有必要输入计算的类,然后根据需要对其进行序列化和反序列化。哪个对您的数据库最有意义。

序列化和反序列化类的最简单方法是使用默认的 Java 序列化程序,如下所示。

public abstract class Calculation {
    public double conversion(double d);
}

public class Sensor_34 extends Calculation implements Serializable {
    public double conversion(double d) {
        // conversion code
    }
}

ByteArrayOutputStream byteOut = new ByteArrayOutputStream();
ObjectOutputStream objectOut = new ObjectOutputStream(byteOut);
Sensor_34 sensor34 = new Sensor_34();
objectOut.writeObject(sensor34);
objectOut.close();
byte[] saveThisValue = byteOut.toByteArray(); // save the byte[] to the database

// ***

byte[] input = Database.read(); // read the byte[] back from the database
ByteArrayInputStream byteIn = new ByteArrayInputStream(input);
ObjectInputStream objectIn = new ObjectInputSteam(byteIn);
Calculation calculation = (Calculation)objectIn.readObject();
// Now use the calculation object's "conversion" method to perform the conversion

因此,总而言之,将 Sensor_34 对象序列化为字节数组并将其保存到数据库中,然后将字节数组读回并将其转换回 Sensor_34 对象。

于 2013-04-09T23:59:30.757 回答