在我的应用程序中,主要的数据集是一个二维char数组(char[][]
),其中一些值可能是不可打印的字符,甚至是\0
个字符。将此数组存储在共享prefs中并在以后检索它的最快方法是什么?对于我来说,检索速度比保存它的速度要重要得多。阵列不是特别大,可能不超过100x100。
目前,我通过简单地连接所有字符,逐行,逐列,并将字符串与维度(作为int)一起存储,将其转换为字符串。
我还考虑过将数组(writeObject
)序列化为ByteArrayOutputStreram
,然后使用流的toString
方法),但尚未尝试过。
还有其他建议吗?同样,最快的检索(以及作为char [] []数组的重新创建)是我最关心的问题。
答案 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的字符串,我使用不同的方式在应用程序中存储数据。
我使用内部文件(fileGetInput
和fileGetOutput
),然后创建HashMap<Integer, char[][]>
并使用writeObject
将其写入文件。因为我有一些char数组,由整数ID标识,这样我就可以一次性保存它们。
我确实意识到我可能会在性能方面失去一些东西,但在这种情况下,可靠性首先出现。