Č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).