Sobes.tech
Junior

Čo je serializácia a parsovanie objektov v Android?

sobes.tech AI

Odpoveď od AI

Serializácia je proces prevodu objektu do toku bajtov za ukladanie (napríklad do súboru alebo databázy) alebo prenos (napríklad cez sieť). Parsovanie (alebo deserializácia) je opačný proces: obnovenie objektu zo streamu bajtov. V Androidu na tieto účely najčastejšie používajú Serializable alebo Parcelable.

Serializable (štandardné Java rozhranie): Jednoduché na použitie (stačí implementovať rozhranie), ale pomalšie ako Parcelable a vytvára veľa dočasných objektov.

// Príklad Serializable
import java.io.Serializable;

public class MySerializableObject implements Serializable {
    private static final long serialVersionUID = 1L; // Odporúča sa uvádzať
    private String name;
    private int age;

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

    // Gettery a settery
}

Parcelable (Android špecifické rozhranie): Rýchlejšie a efektívnejšie ako Serializable, pretože je optimalizované pre IPC (medzoprocesovú komunikáciu). Vyžaduje viac kódu na implementáciu.

// Príklad 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;
    }

    // Konštruktor pre deserializáciu
    protected MyParcelableObject(Parcel in) {
        name = in.readString();
        age = in.readInt();
    }

    // Creator pre vytváranie inštancií z 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; // Väčšinou 0
    }

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

    // Gettery a settery
}

Porovnanie:

Funkcia Serializable Parcelable
Rozhranie java.io.Serializable android.os.Parcelable
Výkon Pomalšie Rýchlejšie
Jednoduchosť použitia Jednoduchšie (menej kódu) Zložitejšie (viac kódu)
Použitie Obecný Java Android (IPC, Bundles, Intents)
Vytváranie objektov Viac dočasných objektov Menej dočasných objektov

Parcelable je preferované pre prenos dát medzi komponentami Android aplikácie (napríklad cez Intent alebo Bundle).