Sobes.tech
Junior

O que é serialização e análise de objetos no Android?

sobes.tech IA

Resposta da IA

A serialização é o processo de transformar um objeto numa sequência de bytes para armazenamento (por exemplo, num ficheiro ou base de dados) ou transmissão (por exemplo, através de rede). O parsing (ou deserialização) é o processo inverso: restaurar um objeto a partir de uma sequência de bytes. No Android, para esses fins, geralmente usam-se Serializable ou Parcelable.

Serializable (interface padrão do Java): fácil de usar (apenas precisa implementar a interface), mas mais lento que Parcelable e cria muitos objetos temporários.

// Exemplo Serializable
import java.io.Serializable;

public class MySerializableObject implements Serializable {
    private static final long serialVersionUID = 1L; // Recomenda-se especificar
    private String name;
    private int age;

    public MySerializableObject(String name, int age) {
        this.name = name;
        this.age = age;
    }

    // Getters e setters
}

Parcelable (interface específica do Android): mais rápido e eficiente que Serializable, pois é otimizado para IPC (Comunicação entre Processos). Requer mais código para implementar.

// Exemplo 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;
    }

    // Constructor para deserialização
    protected MyParcelableObject(Parcel in) {
        name = in.readString();
        age = in.readInt();
    }

    // Creator para criar instâncias a partir de 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; // Sempre 0 para a maioria dos objetos
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeString(name);
        dest.writeInt(age);
    }

    // Getters e setters
}

Comparação:

Funcionalidade Serializable Parcelable
Interface java.io.Serializable android.os.Parcelable
Performance Mais lento Mais rápido
Facilidade de uso Mais fácil (menos código) Mais difícil (mais código)
Uso Java geral Android (IPC, Bundles, Intents)
Criação de objetos Mais objetos temporários Menos objetos temporários

Parcelable é preferido para transferência de dados entre componentes de aplicações Android (por exemplo, através de Intent ou Bundle).