Junior
Объектҳои сериалӣ ва парселшаванда чӣ гунаанд?
sobes.tech AI
Ҷавоб аз AI
Обектите, които могат да бъдат сериализирани, могат да бъдат преобразувани в байтов поток за съхранение или пренос, използвайки стандартния механизъм на Java java.io.Serializable.
Обектите, които могат да бъдат парселизирани, също могат да бъдат опаковани и разопаковани, но използват специализиран механизъм на Android android.os.Parcelable. Този механизъм е по-ефективен за пренос на данни между компоненти на Android, тъй като е оптимизиран за IPC (междупроцесна комуникация).
| Характеристика | Serializable |
Parcelable |
|---|---|---|
| Механизъм | Java рефлексия | Android Parceling API |
| Производителност | По-малко ефективен (използва рефлексия) | По-ефективен |
| Реализация | По-проста (маркерен интерфейс) | Изисква реализиране на методите writeToParcel, createFromParcel, describeContents |
| Използване | Стандартно Java приложение, отдалечен извикване на методи (RMI) | Специфично за Android, пренос на данни между активити, услуги и др. |
| Бойлерплейт | Меньше код | Повече код |
Пример за реализация на Parcelable:
// MyParcelableObject.java
package com.example.myapplication;
import android.os.Parcel;
import android.os.Parcelable;
public class MyParcelableObject implements Parcelable {
private String name;
private int value;
public MyParcelableObject(String name, int value) {
this.name = name;
this.value = value;
}
protected MyParcelableObject(Parcel in) {
name = in.readString();
value = in.readInt();
}
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(value);
}
// Гетъри (пропуснати за краткост)
}