![](/img/trans.png)
[英]What is the best way to store static data for an android application?
[英]Best way to store static data to be bundled with application?
我正在用java编写一个应用程序,这将有助于使用现成的微控制器,传感器和无线电创建无线传感器网络。 每个传感器和无线电很可能需要唯一的代码。 我打算为每个平台创建骨架,然后为每个传感器和无线电设备提供模块化的代码,这些代码可以插入到这些骨架中。 这将生成一个静态信息库,用于为这些传感器动态生成代码。
我不确定存储和组织这些数据的最佳方法是什么。 我开始尝试为每个传感器创建封装其独特属性的类,但使用对象进行数据存储只是看起来很奇怪。 我觉得SQL会有点矫枉过正,因为数据并没有真正改变,我也希望将所有内容保存在版本控制中。 我应该只使用平面文件吗? XML? 关于如何设计这个项目的任何建议都将非常受欢迎。
而不是生成源,我会去二进制。 从概念上讲,就是这样。
如果设备插入或拔出,为什么源代码需要更改? 只需编译二进制设备驱动程序库并将它们链接到主应用程序。 有一个汇编程序,很可能有一个链接器。
如果没有链接器,并且您被迫使用单片源文件,那么至少我们可以使用链接器的概念 。
链接源代码
有关灵感和细节,我将详细介绍操作系统设计 ,了解设备驱动程序 , IO设备和网络套接字的概念 。 我将使用它来仔细研究将要生成的源,以及如果更改设备会发生什么变化,并将其修复以便尽可能少地删除,理想情况下不需要更改。
在(可能是嵌入式)系统上运行的应用程序的代码应该与设备驱动程序分开维护,因此这里需要开始抽象。 需要对其进行重构,以将设备的细节抽象为抽象设备类 。
所以这是第一步:重构生成的源以抽象出设备驱动程序的细节,以便您拥有一个通过符号调用函数的主应用程序。
无论可用设备的数量和种类如何,这都允许主应用程序工作。
接下来,我将研究编译器理论 ,特别是符号解析和静态/动态链接以及存根的概念 。 由于生成的源被重构,因此存在主应用程序和设备驱动程序列表,剩下的就是使设备可用于应用程序。
插图
应用程序可以通过将主应用程序的源与设备驱动程序的源连接来生成要组装的源代码。
它还将提供一个存根 :一个小型库,提供迭代设备和查询其类的功能。
然后,您的应用程序变得如此简单,以至于* NIX提示符上的单行可以执行此操作。 不需要Java:
cat program stub drivers/foo drivers/bar > generated-source-or-binary
在它最简单的形式中, program
将包含对stub
的iterate_devices
标签的调用。
这是源和/或二进制映像的布局:
// 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数据库。 但资源文件将是一个不错的开始。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.