Czym jest serializacja i parsowanie obiektów w Androidzie?
sobes.tech AI
Odpowiedź od AI
Serializacja to proces konwersji obiektu na strumień bajtów do celów przechowywania (np. w pliku lub bazie danych) lub przesyłania (np. przez sieć).
Parsowanie (lub deserializacja) to proces odwrotny: przywracanie obiektu ze strumienia bajtów.
W Androidzie do tych celów najczęściej używa się Serializable lub Parcelable.
Serializable (standardowy interfejs Java): łatwy w użyciu (wystarczy zaimplementować interfejs), ale wolniejszy niż Parcelable i tworzy dużo tymczasowych obiektów.
// Przykład Serializable
import java.io.Serializable;
public class MySerializableObject implements Serializable {
private static final long serialVersionUID = 1L; // Zaleca się podanie
private String name;
private int age;
public MySerializableObject(String name, int age) {
this.name = name;
this.age = age;
}
// Gettery i settery
}
Parcelable (interfejs specyficzny dla Androida): szybszy i bardziej wydajny niż Serializable, ponieważ jest zoptymalizowany do IPC (komunikacji międzyprocesowej). Wymaga więcej kodu.
// Przykład 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;
}
// Konstruktor do deserializacji
protected MyParcelableObject(Parcel in) {
name = in.readString();
age = in.readInt();
}
// Creator do tworzenia instancji 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; // Zazwyczaj 0
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(name);
dest.writeInt(age);
}
// Gettery i settery
}
Porównanie:
| Funkcja | Serializable | Parcelable |
|---|---|---|
| Interfejs | java.io.Serializable |
android.os.Parcelable |
| Wydajność | Wolniejszy | Szybszy |
| Łatwość użycia | Łatwiejszy (mniej kodu) | Trudniejszy (więcej kodu) |
| Zastosowanie | Java ogólnie | Android (IPC, Bundles, Intents) |
| Tworzenie obiektów | Więcej tymczasowych obiektów | Mniej tymczasowych obiektów |
Parcelable jest preferowany do przesyłania danych między komponentami Androida (np. przez Intent lub Bundle).