在我的应用程序中,主要的数据集是二维字符数组(char[][]),其中一些值可能是不可打印字符,甚至是\0字符。在共享的prefs中存储这个数组并在以后检索它的最快方法是什么?对我来说,检索的速度比保存的速度重要得多。阵列不是特别大,可能不超过100x100。
现在,我将它转换成一个字符串,方法是简单地将所有字符、一行一行、一列一列地连接起来,并将字符串与维度(int)一起存储。
我也考虑过将数组(writeObject序列化为ByteArrayOutputStreram然后使用流的toString方法),但还没有尝试过。
还有其他建议吗?同样,最快的检索(以及作为char[][]数组的重新创建)也是我最关心的问题。

最佳答案

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

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

07-24 09:37
查看更多