在共享首选项中存储char [] []的最快方法

时间:2012-03-21 16:42:30

标签: java android multidimensional-array sharedpreferences arrays

在我的应用程序中,主要的数据集是一个二维char数组(char[][]),其中一些值可能是不可打印的字符,甚至是\0个字符。将此数组存储在共享prefs中并在以后检索它的最快方法是什么?对于我来说,检索速度比保存它的速度要重要得多。阵列不是特别大,可能不超过100x100。

目前,我通过简单地连接所有字符,逐行,逐列,并将字符串与维度(作为int)一起存储,将其转换为字符串。

我还考虑过将数组(writeObject)序列化为ByteArrayOutputStreram,然后使用流的toString方法),但尚未尝试过。

还有其他建议吗?同样,最快的检索(以及作为char [] []数组的重新创建)是我最关心的问题。

2 个答案:

答案 0 :(得分:0)

我发布了一种使用许多原生函数的方法,因此可能很快。请注意,这是未经测试的,只能用于鼓舞人心。

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;
}

答案 1 :(得分:0)

因为StringSet方法(put和get)只能从Android 3.0获得,而且因为我发现在存储长字符串时,首选项不太可靠,特别是那些包含0-chars的字符串,我使用不同的方式在应用程序中存储数据。

我使用内部文件(fileGetInputfileGetOutput),然后创建HashMap<Integer, char[][]>并使用writeObject将其写入文件。因为我有一些char数组,由整数ID标识,这样我就可以一次性保存它们。

我确实意识到我可能会在性能方面失去一些东西,但在这种情况下,可靠性首先出现。