Какво е сериализация и парсинг на обекти в Android?
sobes.tech AI
Отговор от AI
Сериализацията е процесът на преобразуване на обект в поток от байтове за съхранение (например във файл или база данни) или пренос (например по мрежа).
Парсингът (или десериализацията) е обратният процес: възстановяване на обекта от поток байтове.
В Android за тези цели най-често се използват Serializable или Parcelable.
Serializable (стандартен Java интерфейс): Лесен за използване (трябва само да реализира интерфейса), но по-бавен от Parcelable и създава много временни обекти.
// Пример Serializable
import java.io.Serializable;
public class MySerializableObject implements Serializable {
private static final long serialVersionUID = 1L; // Препоръчително е да се посочи
private String name;
private int age;
public MySerializableObject(String name, int age) {
this.name = name;
this.age = age;
}
// Гетъри и сетъри
}
Parcelable (специфичен за Android интерфейс): По-бърз и по-ефективен от Serializable, тъй като е оптимизиран за IPC (междопроцесна комуникация). Изисква повече код за реализиране.
// Пример 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;
}
// Конструктор за десериализация
protected MyParcelableObject(Parcel in) {
name = in.readString();
age = in.readInt();
}
// Creator за създаване на екземпляри от 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; // Винаги 0
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(name);
dest.writeInt(age);
}
// Гетъри и сетъри
}
Сравнение:
| Характеристика | Serializable | Parcelable |
|---|---|---|
| Интерфейс | java.io.Serializable |
android.os.Parcelable |
| Производителност | По-бавен | По-бърз |
| Лесна употреба | По-лесен (по-малко код) | По-труден (повече код) |
| Използване | Общ Java | Android (IPC, Bundles, Intents) |
| Създаване на обекти | Повече временни обекти | По-малко временни обекти |
Parcelable е предпочитаният начин за пренос на данни между компонентите на Android приложението (например чрез Intent или Bundle).