使用共享首选项存储字节数组

2022-08-31 17:06:27

所以我有一个我在Android应用程序中创建的。我想使用Android中的共享首选项来存储它,并在启动我的应用程序时再次检索它。我该怎么做?byte [] array


答案 1

您可以使用 android.util.Base64 在 SharedPreferences 中保存字节数组。

为了保存:

String saveThis = Base64.encodeToString(array, Base64.DEFAULT);

对于装载:

byte[] array = Base64.decode(stringFromSharedPrefs, Base64.DEFAULT);

答案 2

当您将数据转换为 Base64 字符串时,您实际上会放大数据的大小

Base64 编码的二进制数据的最终大小等于原始数据大小的 1.37 倍 + 814 字节(对于标头)。

使用字符集在共享首选项中保存字节[]更快,内存效率更高.ISO_8859_1

private static final String PREF_NAME = "SharedPreferences_Name";
private static final String DATA_NAME = "BytesData_Name";

public static byte[] getBytes(Context ctx) {
    SharedPreferences prefs = ctx.getSharedPreferences(PREF_NAME, Context.MODE_PRIVATE);
    String str = prefs.getString(DATA_NAME, null);
    if (str != null) {
        return str.getBytes(Charsets.ISO_8859_1);
    }
    return null;
}

public static void setBytes(Context ctx, byte[] bytes) {
    SharedPreferences prefs = ctx.getSharedPreferences(PREF_NAME, Context.MODE_PRIVATE);
    SharedPreferences.Editor e = prefs.edit();
    e.putString(DATA_NAME, new String(bytes, Charsets.ISO_8859_1));
    e.commit();
}
  • ISO_8859_1保留您的数据(与 UTF-8 和 UTF-16 不同)
  • 如果要将这些字节传输到应用外部(例如使用 JSON),则必须在序列化它们之前将字节 [] 转换为 Base64。
  • JSON将无法理解ISO_8859_1将使用的奇怪字符。

提示:如果您想节省更多空间(以防万一您节省了巨大的字节[]),请在将其转换为任何格式(ISO或Base64)之前压缩字节[]


推荐