存储与应用程序捆绑在一起的静态数据的最佳方法是什么?

时间:2015-11-01 01:13:47

标签: java database data-structures

我正在用java编写一个应用程序,这将有助于使用现成的微控制器,传感器和无线电创建无线传感器网络。每个传感器和无线电很可能需要唯一的代码。我打算为每个平台创建骨架,然后为每个传感器和无线电设备提供模块化的代码,这些代码可以插入到这些骨架中。这将产生一个静态信息库,用于为这些传感器动态生成代码。

我不确定存储和整理这些数据的最佳方法是什么。我开始尝试为每个传感器创建封装其独特属性的类,但使用对象进行数据存储只是看起来很奇怪。我觉得SQL会有点矫枉过正,因为数据并没有真正改变,我也希望将所有内容保存在版本控制中。我应该只使用平面文件吗? XML?关于如何设计这个项目的任何建议都是非常受欢迎的。

1 个答案:

答案 0 :(得分:1)

我没有生成源代码,而是使用二进制文件。从概念上讲,就是这样。

如果设备插入或拔出,​​为什么需要更改源代码?只需编译二进制设备驱动程序库并将它们链接到主应用程序。 有一个汇编程序,很可能有一个链接器。

如果没有链接器,并且您被迫使用单片源文件,那么至少我们可以使用链接器的概念

关联源代码

对于灵感和细节,我会对设备驱动程序 IO设备的概念进行一些研究操作系统设计 em>和网络套接字。我将使用它来仔细查看将要生成的源,以及设备更改后的确切更改,并修复它以便尽可能少地删除,理想情况下不需要更改。

在(可能是嵌入式)系统上运行的应用程序的代码应该与设备驱动程序分开维护,因此这里是抽象需要开始的地方。需要对其进行重构,以将设备的细节抽象为抽象设备类

所以这是第一步:重构生成的源以抽象出设备驱动程序的细节,以便您拥有一个主要的 通过符号调用函数的应用程序。

无论可用设备的数量和种类如何,这都允许主应用程序正常工作。

接下来,我将研究编译器理论,特别是符号解析静态/动态链接的概念,以及< EM>存根。由于生成的源被重构,因此存在主应用程序和设备驱动程序列表,剩下的就是使设备可用于应用程序。

<强>插图

应用程序可以通过将主应用程序的源与设备驱动程序的源连接来生成要组装的源代码。

它还将提供存根:一个小型库,提供迭代设备和查询其类的函数。

然后您的应用程序变得如此简单,以至于* NIX提示符上的单行可以执行此操作。不需要Java:

cat program stub drivers/foo drivers/bar > generated-source-or-binary

使用最简单的格式,program会在iterate_devices中调用stub标签。

这是源和/或二进制图像的布局:

// application
main() {
   for ( device in list_devices() ) {
      switch ( device.class ) {
         ....
      }
   }
}

// stub
list_devices() {
   for ( device = first; device != null; device += *cur )
      yield device;       
}
first: // drivers follow

// drivers/foo
dev_foo: .long dev_foo_end - . // size
....
dev_foo_end

// drivers/bar
dev_bar: .long dev_bar_end - .
....
dev_bar_end

整理驱动程序来源

这不应该比带文件的目录更复杂。

一种简单的方法是将这些包含在特定包中的.jar中。例如,让一个类提供这样的驱动程序源:

package myapp.drivers;
public class DriverSource {
    public static InputStream getDriverSource( String identifier ) {
        return this.getClass().getClassLoader().getResourceAsStream(
           this.getClass().getPackage().getName().replace('.', '/')
           + '/' + identifier + '.source'
        );
    }
}

需要将驱动程序源放入myapp/drivers/{identifier}.source。在标准的eclipse项目中,您将文件放在src/myapp/drivers/中。使用Maven,您可以将它们放入src/main/resources/myapp/drivers/。您也可以将它们放在另一个目录中,只要它们作为资源复制到正确的包目录中即可。

上述类也可以作为更复杂存储的基础:您可以查询远程服务并下载源文件,或查询SQL数据库。但资源文件将是一个不错的开始。