Android: guarda datos parcelables en un archivo

Solía ​​usar objetos Serializable para guardarlos en filesytem y leerlos para hacer lo que quiera. Pero la serialización es lenta cuando tienes que pasar datos entre actividades, así que leo que es recomendable usar Parcelable. Entonces lo hice y sí es más rápido! Pero ahora, tengo un pequeño problema. Dado que Parcelable está optimizado para IPC, entonces no son serializables y no se pueden guardar en un archivo. Así que quiero saber si es posible hacerlo.

Además, si decido implementar la interfaz Parcelable y Serializable para mi clase, pero sólo uso el Parcelable para pasar datos entre mis actividades, podría guardar la clase en un archivo. Pero supongo que ya que uso serializable (sólo para guardar, no para pasar los datos), esto no es una buena idea zumbido?

Pensé también en usar la biblioteca de Gson, para serializar datos de la clase, y guardar el JSON en un archivo, y reutilizar Gson para deserializar JSON para obtener mi objeto Parcelable. ¿Parece ser una buena idea? ¿Qué pasa con el rendimiento?

¡Gracias a todos por sus respuestas!

J.

Simplemente haga context.getFilesDir () y utilice java.io.ObjectInputStream y java.io.ObjectOutputStream.

Además, con respecto a "Parcelable no ahora serializable". Esto no tiene mucho sentido desde Parcelable en una interfaz, no una clase que usted extiende.

Asi que,

class MyClass implements Parcelable, Serializable { } 

Debería funcionar bien. Una vez que lea y escriba el objeto en el sistema de archivos, la interfaz Parcelable seguirá funcionando. Es sólo una interfaz.

Tengo que admitir que no lo he probado, pero es lo que escribí hoy y estaré escribiendo la prueba de la unidad mañana.

Espero que esto ayude.

Aquí hay otro enfoque si, como usted dice, hay un conflicto entre las interfaces Parcelable y Serializable. (Otra vez, eso no tiene sentido, pero confiaré en ti hasta que termine mis pruebas de unidad mañana) …

Piensa sobre esto:

  Parcel p = Parcel.obtain(); p.writeValue(asset); p.setDataPosition(0); byte [] b = p.marshall(); p.recycle(); 

OOPS, acaba de leer el javaDoc para marshall () y dice que NO ALMACEN A DISCO. También dice: "Usar serialización estándar para almacenar en disco" (paráfrasis).

Por lo tanto, mi primera respuesta debe hacerlo por usted.

¿Has intentado usar las preferencias compartidas? Si necesita almacenar valores clave. Además, será un XML.

  • Problema serializable de Android
  • ¿Puedo enviar objetos personalizados a Android Wear?
  • Estado de restauración después de que el proceso se destruye
  • DecodeByteArray y copyPixelsToBuffer no funcionan. SkImageDecoder :: Factory devuelto null
  • Pasar argumento entre Actividades - nulo
  • Downcasting de Serializable a LinkedList <Class>
  • Persistencia de un objeto Parcelable en Android
  • Uso de parceler (@Parcel) con Realm.io (Android)
  • ArrayList no se puede convertir en clase personalizada extendiendo ArrayList
  • Android ArrayList de objetos personalizados - Guardar en SharedPreferences - Serializable?
  • ¿Un objeto serializable siempre se serializa cuando se pone en un paquete?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.