Junior
¿Qué son los objetos serializables y parcelables?
sobes.tech AI
Respuesta de la IA
Los objetos serializables pueden convertirse en un flujo de bytes para almacenamiento o transmisión, utilizando el mecanismo estándar de Java java.io.Serializable.
Los objetos parcelables también pueden ser empaquetados y desempaquetados, pero utilizan un mecanismo especializado de Android android.os.Parcelable. Este mecanismo es más eficiente para la transferencia de datos entre componentes de Android, ya que está optimizado para IPC (Comunicación entre Procesos).
| Característica | Serializable |
Parcelable |
|---|---|---|
| Mecanismo | Reflexión en Java | API de Parceling de Android |
| Rendimiento | Menos eficiente (usa reflexión) | Más eficiente |
| Implementación | Más simple (interfaz de marcador) | Requiere implementar métodos writeToParcel, createFromParcel, describeContents |
| Uso | Aplicaciones Java estándar, llamadas remotas (RMI) | Específico de Android, transferencia de datos entre actividades, servicios, etc. |
| Plantilla | Menos código | Más código |
Ejemplo de implementación de Parcelable:
// MyParcelableObject.java
package com.example.myapplication;
import android.os.Parcel;
import android.os.Parcelable;
public class MyParcelableObject implements Parcelable {
private String name;
private int value;
public MyParcelableObject(String name, int value) {
this.name = name;
this.value = value;
}
protected MyParcelableObject(Parcel in) {
name = in.readString();
value = in.readInt();
}
public static final Creator<MyParcelableObject> CREATOR = new Creator<MyParcelableObject>() {
@Override
public MyParcelableObject createFromParcel(Parcel in) {
return new MyParcelableObject(in);
}
@Override
public MyParcelableObject[] newArray(int size) {
return new MyParcelableObject[size];
}
};
@Override
public int describeContents() {
return 0; // Normalmente 0, si no hay descriptores de archivos especiales
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(name);
dest.writeInt(value);
}
// Getters (omitidos por brevedad)
}