Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Cómo convertir mapa a bytes y guardar en almacenamiento interno

¿Cómo puedo convertir mi Map<Integer, String > a byte[] , y luego escribirlo en el almacenamiento interno? Actualmente tengo:

  try { FileOutputStream fos = context.openFileOutput(Const.FILE_CATEGORIES, Context.MODE_PRIVATE); fos.write(null); } catch (FileNotFoundException e) { // reload and create the file again } 

Pero .. No sé cómo obtener el Map en el formato correcto, y luego decodificar de nuevo a su formato original una vez que tengo que cargar de nuevo. Necesito volver a crear este archivo una vez por semana y cargarlo en el inicio de la aplicación.

2 Solutions collect form web for “Cómo convertir mapa a bytes y guardar en almacenamiento interno”

  1. Usando la serialización en java puede analizar fácilmente cualquier objeto serializable a la corriente de bytes. Intente utilizar ObjectInputStream y ObjectOuputStream.

  2. Utilice json para restaurar. Puede utilizar google-gson para convertir objetos Java a JSON y viceversa.

  3. Utilizar parcela en android. La clase android.os.Parcel está diseñada para pasar datos entre los componentes de android (actividad, servicio), pero todavía se puede utilizar para hacer la persistencia de datos. Sólo recuerde que no envíe los datos a Internet ya que las diferentes plataformas pueden tener diferentes algoritmos para hacer el análisis.

Escribí una demo para la serialización, intento.

 public static void main(String[] args) throws Exception { // Create raw data. Map<Integer, String> data = new HashMap<Integer, String>(); data.put(1, "hello"); data.put(2, "world"); System.out.println(data.toString()); // Convert Map to byte array ByteArrayOutputStream byteOut = new ByteArrayOutputStream(); ObjectOutputStream out = new ObjectOutputStream(byteOut); out.writeObject(data); // Parse byte array to Map ByteArrayInputStream byteIn = new ByteArrayInputStream(byteOut.toByteArray()); ObjectInputStream in = new ObjectInputStream(byteIn); Map<Integer, String> data2 = (Map<Integer, String>) in.readObject(); System.out.println(data2.toString()); } 

O bien serializar como faylon mencionado, o implementar su propio mecanismo para guardar y cargar su mapa. Al guardar, itera sobre todos los elementos y guarda pares de valores clave. Al cargar, se añaden de nuevo. La implementación de su propio mecanismo tiene la ventaja de que todavía puede utilizar sus valores persistentes cuando su programa se utiliza con otra versión de Java.

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.