Самый быстрый способ сохранить char [] [] в общих настройках - PullRequest
3 голосов
/ 21 марта 2012

В моем приложении основным набором данных является двумерный массив символов (char[][]), в котором некоторые значения могут быть непечатными символами и даже \0 символами. Какой самый быстрый способ сохранить этот массив в общих префсах и получить его позже? Скорость поиска намного важнее для меня, чем скорость его сохранения. Массивы не очень большие, вероятно, не более 100x100.

В настоящее время я преобразовываю ее в строку, просто объединяя все символы, строка за строкой, столбец за столбцом и сохраняя строку вместе с измерениями (как int).

Я также рассмотрел просто сериализацию массива (writeObject в ByteArrayOutputStreram и затем использовал метод toString потока), но еще не пробовал.

Есть другие предложения? Опять же, моя главная задача - максимально быстрый поиск (и воссоздание в виде массива char [] []).

Ответы [ 2 ]

0 голосов
/ 26 марта 2012

Поскольку StringSet методы (put и get) доступны только в Android 3.0, а также потому, что я обнаружил, что предпочтения менее надежны при хранении длинных строк, особенно тех, которые содержат 0-символ, я использую другой способ хранения данных в приложении.

Я использую внутренние файлы (fileGetInput и fileGetOutput), затем создаю HashMap<Integer, char[][]> и записываю его в файл, используя writeObject. Поскольку у меня есть несколько из этих массивов символов, идентифицированных целочисленным идентификатором, таким образом, я сохраняю их все за один раз.

Я понимаю, что, возможно, что-то теряю с точки зрения производительности, однако в этом случае надежность стоит на первом месте.

0 голосов
/ 26 марта 2012

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

public void save(char[][] chars) {
    Set<String> strings = new LinkedHashSet<String>(chars.length);

    for(int i = 0, len = chars.length; i < len; i++) {
        strings[i] = new String(chars[i]);
    }

    getSharedPreferences().edit().putStringSet("data", strings).commit();
}

public char[][] read() {
    Set<String> strings = getSharedPreferences().getStringSet("data", new LinkedHashSet<String>());

    char[][] chars = new char[strings.size][];
    int i = 0;

    for(String line : strings) {
        chars[i++] = line.toCharArray();
    }

    return chars;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...