Sobes.tech
Junior

Ce este serializarea și analizarea obiectelor în Android?

sobes.tech AI

Răspuns de la AI

Serializarea este procesul de conversie a unui obiect într-un flux de octeți pentru stocare (de exemplu, într-un fișier sau bază de date) sau transfer (de exemplu, prin rețea). Parsarea (sau deserializarea) este procesul invers: restaurarea unui obiect dintr-un flux de octeți. În Android, pentru aceste scopuri, se folosesc cel mai adesea Serializable sau Parcelable.

Serializable (interfața standard Java): ușor de utilizat (trebuie doar să implementezi interfața), dar mai lent decât Parcelable și creează multe obiecte temporare.

// Exemplu Serializable
import java.io.Serializable;

public class MySerializableObject implements Serializable {
    private static final long serialVersionUID = 1L; // Se recomandă specificarea
    private String name;
    private int age;

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

    // Getteri și setteri
}

Parcelable (interfață specifică Android): mai rapid și mai eficient decât Serializable, deoarece este optimizat pentru IPC (Comunicare între procese). Necesită mai mult cod.

// Exemplu 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;
    }

    // Constructor pentru deserializare
    protected MyParcelableObject(Parcel in) {
        name = in.readString();
        age = in.readInt();
    }

    // Creator pentru crearea instanțelor din 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; // Pentru majoritatea obiectelor
    }

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

    // Getteri și setteri
}

Comparare:

Caracteristică Serializable Parcelable
Interfață java.io.Serializable android.os.Parcelable
Performanță Mai lent Mai rapid
Ușurință în utilizare Mai ușor (mai puțin cod) Mai dificil (mai mult cod)
Utilizare Java general Android (IPC, Bundles, Intents)
Crearea obiectelor Mai multe obiecte temporare Mai puține obiecte temporare

Parcelable este preferat pentru transferul de date între componentele Android (de exemplu, prin Intent sau Bundle).