java - studio - Guardar matriz de bytes usando SharedPreferences
sharedpreferences list (4)
En realidad, amplías el tamaño de un dato cuando lo conviertes en una Cadena Base64.
el tamaño final de los datos binarios codificados en Base64 es igual a 1,37 veces el tamaño de los datos originales + 814 bytes (para los encabezados).
Es más rápido y eficiente en la memoria guardar un byte [] en las Preferencias Compartidas usando Charsets.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 conserva sus datos (a diferencia de UTF-8 y UTF-16)
- Si vas a transferir estos bytes fuera de la aplicación, usando un JSON por ejemplo, entonces tendrás que convertir el byte [] a Base64 antes de serializarlos.
- JSON no podrá entender los caracteres extraños que ISO_8859_1 va a utilizar.
SUGERENCIA : si desea ahorrar más espacio (en caso de que guarde un byte enorme []) comprima el byte [] antes de convertirlo a cualquier formato (ISO o Base64)
Así que tengo una byte [] array
que he creado en mi aplicación de Android. Quiero usar SharedPreferences de android para almacenarlo y recuperarlo de nuevo cuando inicio mi aplicación. Cómo puedo hacer eso ?
Guardar una matriz en Preferencias compartidas:
public static boolean saveArray()
{
SharedPreferences sp = SharedPreferences.getDefaultSharedPreferences(this);
SharedPreferences.Editor mEdit1 = sp.edit();
mEdit1.putInt("Status_size", byteArr.size()); /* byteArr is an array */
for(int i=0;i<byteArr.size();i++)
{
mEdit1.remove("Status_" + i);
mEdit1.putString("Status_" + i, byteArr.get(i));
}
return mEdit1.commit();
}
Cargando datos de matriz desde preferencias compartidas:
public static void loadArray(Context mContext)
{
Shared Preferences mSharedPreference1 = PreferenceManager.getDefaultSharedPreferences(mContext);
byteArr.clear();
int size = mSharedPreference1.getInt("Status_size", 0);
for(int i=0;i<size;i++)
{
byteArr.add(mSharedPreference1.getString("Status_" + i, null));
}
}
Implemente y llame a las 2 funciones anteriores. Espero que el código anterior ayude
Podrías tratar de guardarlo tiene una String
:
Storring the array:
SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
SharedPreferences.Editor editor = settings.edit();
editor.putString("myByteArray", Arrays.toString(array));
Recuperando la matriz:
SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
String stringArray = settings.getString("myByteArray", null);
if (stringArray != null) {
String[] split = stringArray.substring(1, stringArray.length()-1).split(", ");
byte[] array = new byte[split.length];
for (int i = 0; i < split.length; i++) {
array[i] = Byte.parseByte(split[i]);
}
}
Puede guardar una matriz de bytes en SharedPreferences usando android.util.Base64.
Para guardar:
String saveThis = Base64.encodeToString(array, Base64.DEFAULT);
Para cargar:
byte[] array = Base64.decode(stringFromSharedPrefs, Base64.DEFAULT);