将Objective-C结构数组转换为Java
我正在把Objective-C移植到Android上。源应用程序将大量数据存储在结构数组中,并具有一些高性能的方法来查找数组和计算结果集,以便在用户用手指在图形上拖动指针时,对图形上的点进行近乎实时的分析。计算结果用于更新图形周围各种视图中的值 下面是一个包含约7.5k结构的示例将Objective-C结构数组转换为Java,java,android,objective-c,Java,Android,Objective C,我正在把Objective-C移植到Android上。源应用程序将大量数据存储在结构数组中,并具有一些高性能的方法来查找数组和计算结果集,以便在用户用手指在图形上拖动指针时,对图形上的点进行近乎实时的分析。计算结果用于更新图形周围各种视图中的值 下面是一个包含约7.5k结构的示例 structDataFeedReduced gFeedData[7662] = { 1233,@"",12.466667,26.166667,@"AARS",0,0,0,1.000000,-1,1,1, 6760,@"
structDataFeedReduced gFeedData[7662] = {
1233,@"",12.466667,26.166667,@"AARS",0,0,0,1.000000,-1,1,1,
6760,@"",15.816667,41.033333,@"DCTT",1,1,1,12.000000,-1,1,2,
8117,@"",44.016667,144.283333,@"SKDD",2,1,2,9.000000,-1,1,1,
8666283,@"WS",42.676666,40.006668,@"DLCC",3,2,3,-5.000000,-1,1,6,
...
...
...
};
我的问题是,用Java静态存储这些数据的最佳方法是什么
我尝试了以下性能不够高的方法,无论是在加载时还是在运行时为计算提供数据
sqllite。
读取存储在资源中的文件。
静态存储为字符串数组,然后使用反映Objective-C结构的类将其初始化为对象,例如从字符串数据转换为int、bools、double等
存储在arrays.xml中,然后以初始化方式将其处理为对象
还有其他模式我可以试试吗?如果没有,那么我会选择上面的3或4,因为我会牺牲一些加载和初始化性能来获得良好的运行时响应
我的后盾是使用JNI将其下推到本机代码中。也许这是唯一有意义的选择
谢谢…您可以将数据作为代码保存。您可以定义StructDataFeedReduced类,然后将初始化代码更改为:
static StructDataFeedReduced[] gFeedData = new StructDataFeedReduced[] {
new StructDataFeedReduced(1233,"",12.466667,26.166667,"AARS",0,0,0,1.000000,-1,1,1),
new StructDataFeedReduced(6760,"",15.816667,41.033333,"DCTT",1,1,1,12.000000,-1,1,2),
...
}
StructDataFeedReduced的构造函数可以根据需要将数据存储在内部字段中。这看起来是使用SQLite的最佳场所,因为您的数据似乎结构良好。感谢Richard,但是SQLLite对于这个问题来说太慢了,即使有适当的索引。我无法显示整个复杂性,但通常有5或6个重定向从一个数组重定向到另一个数组,以查找树末尾的数据。因此,您最终会从选择栏中选择foo,从……中选择blah。。。。。。还有性能坦克。我需要一秒钟做几次查找以保持UI的流畅性。我认为你做得不对。您可以有一个只包含一个表的SQLite DB,该表的数据结构与您的结构相同,您可以使用一个WHERE子句来查找正确的行,然后在应用程序中解析这些行。在格式良好的数据库中应该不需要内部select语句。你是在建议数据去规范化吗?例如,如果我的结构是A、B、C、D和E,我的行是这样的?A1B1C1D1E1;A2B1C1D1E1;A3B1C1D1E1等…谢谢Keith。我现在觉得自己真的很愚蠢,我只是没有意识到可以在数组初始化器中调用类构造函数。很好,谢谢。