Sobes.tech
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)
}