Индексирование набора значений пары ключей для использования в приложении J2ME - PullRequest
1 голос
/ 04 октября 2009

У меня есть около 1000 значений пар ключей, которые я буду использовать в своем приложении j2me, считывая его из файла ресурсов. Однако я буду использовать только несколько из этих значений в любое время, скажем, 10, на основе номера записи, генерируемой внутри логики приложения. Загрузка всех значений в память и последующий поиск - неэффективный вариант, так как я не буду использовать все записи. Есть ли лучшая схема для хранения значений в файле, некоторой индексации или чего-то такого, чтобы я мог извлечь эти значения пары ключей, пропустив количество байтов в файле, чтобы достичь и прочитать соответствующую запись? Поскольку это файл ресурсов в банке, в нем не будет никаких изменений.

Ответы [ 2 ]

1 голос
/ 04 октября 2009

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

Джеф

0 голосов
/ 05 октября 2009

Пропуск байтов в сжатом файле ресурсов внутри jar тоже не будет оптимальным, и реализация InputStream, полученная в результате вызова Class.getResourceAsInputStream (), может быть фрагментирована, если вы планируете запустить приложение на нескольких устройства.

РЕДАКТИРОВАТЬ после дополнительной информации в комментарии:

Возможно, лучший способ сделать это - сохранить данные (вопрос, ответ) в 1000 различных классов.

Это решение покажется очень странным, но загрузчик классов должен загружать только те 10 классов, которые вы на самом деле используете, вы можете сгенерировать 1000 исходных файлов с помощью простой программы J2SE и загрузить 10 случайных классов на основе целого числа внутри их имя, используя java.lang.Class.forName().

Если файл jar не становится слишком большим для использования, вы в основном полагаетесь на индексирование его формата zip-файла для производительности загрузчика классов ...

...