Sobes.tech
Junior

Qu'est-ce que la sérialisation et l'analyse d'objets dans Android?

sobes.tech IA

Réponse de l'IA

La sérialisation est le processus de transformation d'un objet en un flux de bytes pour le stockage (par exemple, dans un fichier ou une base de données) ou la transmission (par exemple, via un réseau). Le parsing (ou désérialisation) est le processus inverse : restaurer un objet à partir d'un flux de bytes. Sur Android, à ces fins, on utilise le plus souvent Serializable ou Parcelable.

Serializable (interface standard Java) : facile à utiliser (il suffit d'implémenter l'interface), mais plus lent que Parcelable et crée beaucoup d'objets temporaires.

// Exemple Serializable
import java.io.Serializable;

public class MySerializableObject implements Serializable {
    private static final long serialVersionUID = 1L; // Il est recommandé de spécifier
    private String name;
    private int age;

    public MySerializableObject(String name, int age) {
        this.name = name;
        this.age = age;
    }

    // Getters et setters
}

Parcelable (interface spécifique à Android) : plus rapide et plus efficace que Serializable, car optimisé pour IPC (Communication Inter-Processus). Nécessite plus de code pour l'implémentation.

// Exemple Parcelable
import android.os.Parcel;
import android.os.Parcelable;

public class MyParcelableObject implements Parcelable {
    private String name;
    private int age;

    public MyParcelableObject(String name, int age) {
        this.name = name;
        this.age = age;
    }

    // Constructeur pour désérialisation
    protected MyParcelableObject(Parcel in) {
        name = in.readString();
        age = in.readInt();
    }

    // Créateur pour créer des instances à partir de Parcel
    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; // Toujours 0 pour la plupart des objets
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeString(name);
        dest.writeInt(age);
    }

    // Getters et setters
}

Comparaison :

Fonctionnalité Serializable Parcelable
Interface java.io.Serializable android.os.Parcelable
Performance Plus lent Plus rapide
Facilité d'utilisation Plus facile (moins de code) Plus difficile (plus de code)
Usage Java général Android (IPC, Bundles, Intents)
Création d'objets Plus d'objets temporaires Moins d'objets temporaires

Parcelable est préféré pour le transfert de données entre composants d'une application Android (par exemple, via Intent ou Bundle).