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) | Spеցիֆիկ է 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);
}
// Գеттерներ (պատմված չեն կարճության համար)
}