Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将Objective-C结构数组转换为Java_Java_Android_Objective C - Fatal编程技术网

将Objective-C结构数组转换为Java

将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,@"

我正在把Objective-C移植到Android上。源应用程序将大量数据存储在结构数组中,并具有一些高性能的方法来查找数组和计算结果集,以便在用户用手指在图形上拖动指针时,对图形上的点进行近乎实时的分析。计算结果用于更新图形周围各种视图中的值

下面是一个包含约7.5k结构的示例

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。我现在觉得自己真的很愚蠢,我只是没有意识到可以在数组初始化器中调用类构造函数。很好,谢谢。