Как эффективно хранить наборы битов на Android - PullRequest
0 голосов
/ 31 июля 2010

Мое приложение требует от меня хранения наборов битов вместе с некоторыми сопутствующими метаданными на платформе Android (пока только для чтения).Теперь, очевидно, я мог бы просто реализовать интерфейс Serializable, но я слышал, что он очень медленный на Android (я могу себе представить, что нужно что-то делать с пользовательской виртуальной машиной и компилятором, что делает такие отражающие функции неэффективными).Должен ли я:

  1. Использовать систему Parcel Android, которая выглядит как "вспомогательная" техника сортировки.
  2. Использовать пользовательский двоичный формат (возможно, стиль BMP с удаленной информацией заголовка).
  3. Сохранение в XML-файл вручную, использование анализатора XML для извлечения данных.

Теперь, насколько я понимаю, сериализация или парселизация XML на самом деле не имеет обратной совместимости на Android?Привлекательность XML заключается в том, что эти постоянные файлы можно редактировать в обычном текстовом редакторе.Что оставляет меня в трудном положении, так как я ненавижу писать код, который является избыточным.

На данный момент я сильно склоняюсь к первому варианту (то есть, к разложению набора битов).Любые опытные программисты на Java / Android хотят сказать мне, насколько хорошо я могу ожидать, что это будет работать?Должен ли я расширить набор битов в массив логических значений, чтобы получить приемлемую производительность во время выполнения?Конечно, проблема заключается в том, что на виртуальной машине Dalvik придется выполнять даже элементарный тест, поскольку я не могу ожидать, что виртуальная машина Sun на x86 будет иметь производительность, аналогичную Android на ARM.Как работает эмулятор Android?Это виртуальная машина поверх хоста x86 или она эмулирует набор инструкций ARM и запускает виртуальную машину, нацеленную на ARM?

Надеюсь, этот пост ADD не смутил всех, потому что смутил меня.: D

Ответы [ 2 ]

2 голосов
/ 18 августа 2010

Вы слышали слух, что сериализация медленная, так что вы собираетесь использовать XML? лол.

вам нужно написать себе некоторые реалистичные тесты, сериализующие виды битовых наборов, с которыми вам действительно нужно иметь дело (большие или маленькие, плотные или редкие и т. Д.). я настоятельно рекомендую http://code.google.com/p/caliper/ для написания ваших тестов. http://code.google.com/p/vogar/ знает, как запустить тест производительности суппорта на устройстве Android.

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

0 голосов
/ 31 июля 2010

Я думаю, что 3-й вариант будет лучшим, поскольку в BitSet, хотя в некоторых случаях он занимает меньше памяти, он может просто тратить пространство, если хранится в двоичном режиме, например:


BitSet b=new BitSet();
b.set(100000);

Inв этом случае у вас есть только один установленный бит, но он просто будет тратить пространство на все неустановленные биты, когда вы сохраняете в файле либо в виде растрового изображения, либо в сериализованном формате.

Если вы уверены, что биты не будут большими числами, перейдите в двоичный режим, иначе перейдите в режим XML или просто в текст, где вы храните b.toString (), и проанализируйте его из файла.когда требуется.

...