在我的应用程序中,主要的数据集是二维字符数组(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;
}