Преобразование структурных массивов Objective-C в Java

1

Я переношу некоторые 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?

Я пробовал следующие, которые не имеют достаточно высокой производительности, либо во время загрузки, либо для предоставления данных для вычислений во время выполнения.

  1. SQL Lite.
  2. Чтение из файлов, хранящихся в активах.
  3. Хранить статически в виде массивов строк, а затем обрабатывать их при инициализации в объекты, используя класс, который отражает структуру Objective-C (например, преобразование в int, bools, double и т.д. Из строковых данных)
  4. Хранение в файле arrays.xml, затем обработка их при инициализации объектов

Есть ли другие шаблоны, которые я мог бы попробовать? Если их нет, то я предпочту 3 или 4, так как я пожертвую некоторой загрузкой и инициализацией для хорошего ответа во время выполнения.

Мое обратное блокирование будет заключаться в том, чтобы сжать его в собственный код с помощью JNI. Возможно, это единственный вариант, который имеет смысл?

Благодаря...

  • 0
    Это выглядит как лучшее место для использования SQLite, поскольку ваши данные выглядят хорошо структурированными.
  • 0
    Спасибо, Ричард, но SQLLite слишком медленный для этой проблемы, даже с соответствующими индексами. Я не могу показать всю сложность, но часто есть 5 или 6 перенаправлений из одного массива в другой для поиска данных в конце дерева. Таким образом, вы получаете SELECT blah FROM (SELECT foo FROM (SELECT bar From ......) и рабочие баки. Мне нужно сделать несколько поисков в секунду, чтобы сохранить UI текучим.
Показать ещё 2 комментария

1 ответ

3
Лучший ответ

Вы можете просто сохранить эти данные в качестве кода. Вы можете определить класс 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 может хранить данные во внутренних полях, если это необходимо.

  • 0
    Спасибо Кит. Теперь я чувствую себя очень глупо, я просто не осознавал, что можно вызывать конструктор класса в инициализаторе массива. Работает нормально, спасибо.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню