Junior
Was sind serialisierbare und parcelierbare Objekte?
sobes.tech KI
Antwort von AI
Serialisierbare Objekte können in einen Byte-Stream umgewandelt werden, um sie zu speichern oder zu übertragen, unter Verwendung des Standardmechanismus von Java java.io.Serializable.
Parcelbare Objekte können ebenfalls verpackt und entpackt werden, verwenden jedoch einen spezialisierten Mechanismus von Android android.os.Parcelable. Dieser Mechanismus ist effizienter für die Datenübertragung zwischen Android-Komponenten, da er für IPC (Inter-Process Communication) optimiert ist.
| Merkmal | Serializable |
Parcelable |
|---|---|---|
| Mechanismus | Java-Reflexion | Android Parceling API |
| Leistung | Weniger effizient (verwendet Reflexion) | Effizienter |
| Implementierung | Einfacher (Marker-Interface) | Erfordert die Implementierung der Methoden writeToParcel, createFromParcel, describeContents |
| Verwendung | Standard Java-Anwendung, Remote-Methodenaufrufe (RMI) | Spezifisch für Android, Datenübertragung zwischen Aktivitäten, Diensten usw. |
| Vorlage | Weniger Code | Mehr Code |
Beispiel für die Implementierung von 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; // Normalerweise 0, wenn keine speziellen Dateideskriptoren vorhanden sind
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(name);
dest.writeInt(value);
}
// Getter (weggelassen für Kürze)
}