1. 程式人生 > >Android序列化 Serializable使用和Parcelable 外掛化使用 以及兩者區別

Android序列化 Serializable使用和Parcelable 外掛化使用 以及兩者區別

當activity之間需要傳輸自定義的實體類物件時,就需要將資料序列化。有兩種方式可以實現:實現Serializable介面 和 實現Parcelable介面

Serializable:

是java提供的一個序列化介面,是個空介面,為物件提供標準的序列和反序列化操作。

使用:
public class HeadAbout extends Serializable{
    private static final long serialVersionUID = -5133337810444911333L;
    private String name;//名稱
    private
String content;//內容 private String isDel;//是否刪除 public String getName() { return name; } public void setName(String name) { this.name = name; }.....

serialVersionUID不寫也可實現序列化,只是反序列化就不可以了,只有序列化資料中的serialVersionUID 和類中的serialVersionUID 值相同,才可以實現反序列化。

Parcelable:

是Android提供的一個序列化方式,它的過程比較複雜。但是Android Studio上面有一個外掛,叫做android parcelable code generator我們可以用外掛實現一鍵生成相關程式碼

外掛android parcelable code generator安裝:

1、開啟File -> Settings -> Plugins ,輸入Android Parcelable code generators搜尋 如圖:
這裡寫圖片描述

點選install安裝就可以了,安裝成功後記得重啟AndroidStudio

外掛化使用:

建好一個實體類,寫好屬性,按下Alt+Insert,選擇Palcelable,選擇需要的屬性,按下OK 如圖:


這裡寫圖片描述

程式碼如下:

public class HeadAbout implements Parcelable {
    private String name;//名稱
    private String content;//內容
    private String isDel;//是否刪除

    /**
     *返回當前物件的內容描述。
     * 如果含有檔案識別符號,則返回1,否則返回0。一般情況都是返回0
     */
    @Override
    public int describeContents() {
        return 0;
    }

    /**
     * 將當前物件寫入序列化結構中
     * flags值為 0 或者 1  幾乎所有情況都為 0  
     * 當為 1 時,標識當前物件需要作為返回值返回,不能立即釋放資源  
     */
    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeString(this.name);
        dest.writeString(this.content);
        dest.writeString(this.isDel);
    }

    public HeadAbout() {
    }

    //從序列化後的物件中建立原始物件
    protected HeadAbout(Parcel in) {
        this.name = in.readString();
        this.content = in.readString();
        this.isDel = in.readString();
    }

    public static final Parcelable.Creator<HeadAbout> CREATOR = new Parcelable.Creator<HeadAbout>() {
        //從序列化後的物件中建立原始物件
        @Override
        public HeadAbout createFromParcel(Parcel source) {
            return new HeadAbout(source);
        }

        //建立指定長度的原始物件陣列
        @Override
        public HeadAbout[] newArray(int size) {
            return new HeadAbout[size];
        }
    };
}

Serializable和Parcelable區別

Serializable和Parcelable都能實現序列化,用於intent間的資料傳遞;
Serializable是java中的序列化介面,使用起來簡單但是記憶體開銷大,序列化和反序列化過程需要大量的IO操作;
Parcelable是Android中的序列化介面,效率高,記憶體開銷較小,但是使用起來稍微麻煩;
Parcelable主要用在記憶體間資料傳輸,如Activity間資料傳輸
Serializable主要用在將物件序列化到儲存裝置或者將物件序列化後通過網路傳輸,Parcelable在這兩個過程中複雜,所以推薦使用 Serializable

相關推薦

java android 序列serializableparcelable

exceptio 對象的引用 undle ktr 實現原理 輸出 fin 使用 讀者 why 為什麽要了解序列化?—— 進行Android開發的時候,無法將對象的引用傳給Activities或者Fragments,我們需要將這些對象放到一個Intent或者Bundle裏面,

Android序列 Serializable使用Parcelable 外掛使用 以及兩者區別

當activity之間需要傳輸自定義的實體類物件時,就需要將資料序列化。有兩種方式可以實現:實現Serializable介面 和 實現Parcelable介面 Serializable: 是java提供的一個序列化介面,是個空介面,為物件提供標準的

序列(SerializableParcelable介面)詳解

1.什麼是序列化? 就是一種處理物件流的機制。所謂物件流就是將物件的內容進行流化,我們可以對流化後的物件進行讀寫操作。也可以將流化後的物件傳輸於網路之間。 2.序列化的實現: 將需要被序列化的類實現Serializalbe,該介面沒有需要實現的方案,只是為了標識該

Android中兩種序列方式的比較SerializableParcelable

Serializable和Parcelable介面可以完成物件的序列化過程, 序列化 (Serialization)將物件的狀態資訊轉換為可以儲存或傳輸的形式的過程。在序列化期間,物件將其當前狀態寫入到臨時或永續性儲存區。以後,可以通過從儲存區中讀取或反序列化物件的狀態

Android 進階6:兩種序列方式 Serializable Parcelable

什麼是序列化 我們總是說著或者聽說著“序列化”,它的定義是什麼呢? 序列化 (Serialization)將物件的狀態資訊轉換為可以儲存或傳輸的形式的過程。在序列化期間,物件將其當前狀態寫入到臨時或永續性儲存區。以後,可以通過從儲存區中讀取或反序列化物

實現序列的兩種方式SerializableParcelable

Serializable       Serializable是Java所提供的一個序列化介面,它是一個空介面,為物件提供標準的序列化和反序列化操作        libcore/ojluni/src/main/java/java/io/Serializable.java

android 支援的序列-------SerializableParcelble

android 支援兩種序列化:Serializable和Parcelble。前者是Java語言自帶的序列化機制,通過讀寫檔案實現物件的序列化和反序列化;後者是Android Os實現的序列化,它是通過讀寫記憶體來實現序列化,從而實現物件的傳遞。下面,就這兩種方式詳細說明。 Serializable S

Java序列SerializableExternalizable

持久化對象 clu version catch 例程 對象 uri put one 紙上得來終覺淺,絕知此事要躬行 --陸遊 問渠那得清如許,為有源頭活水來 --朱熹 什麽是Java序列化?為什麽出現Java序列化?如何實現Java序列化? 一、

AndroidSerializableParcelable序列化物件詳解

學習內容: 1.序列化的目的 2.Android中序列化的兩種方式 3.Parcelable與Serializable的效能比較 4.Android中如何使用Parcelable進行序列化操作 5.Parcelable的工作原理 6.相關例項   1.序列化

Android SerializableParcelable序列化物件詳解

轉載:https://www.cnblogs.com/yezhennan/p/5527506.html 學習內容: 1.序列化的目的 2.Android中序列化的兩種方式 3.Parcelable與Serializable的效能比較 4.Android中如何使用Parcelabl

Java序列-SerializableProtocolBuffers

1.什麼是Java序列化以及Java序列化的作用 Java平臺允許我們在記憶體中建立可複用的Java物件,一般情況下只有當JVM處於執行時,這些物件才可能存在,所以這些物件的生命週期比 JVM的生命週期更短暫。但現實應用中可能要求JVM在停止執行之後能夠儲存(

(雜記)Java序列Serializable序列

1.什麼是java序列化? 把物件轉化為位元組序列的過程稱為序列化 把位元組序列轉化為物件的過程稱為反序列化。 2.為什麼需要序列化? 序列化主要有兩個應用場景: 用於把物件從記憶體中儲存到磁碟中。 用於網路上傳輸物件 此處舉例解釋一下:比如Web開發中經常遇

java中的序列(Serializable)序列

由於JDK提供的這種預設的序列化機制是簡單的將物件變成位元組流, 有時候並不滿足我們的要求, 比如考慮到加密, 或者在反序列化完了後需要呼叫某個方法來初始化transient的屬性等等, JDK提供了一種擴充套件的方法來增加對序列化和反序列化的控制. 那就是可以讓序列化的物件實現下面兩個固定的方法(注意修

Android App熱更新中的外掛(ClassLoader、DexLoader)(1)

PathClassLoader在熱更新的作用? Android ClassLoader流程解讀並簡單方式實現熱更新- https://www.jianshu.com/p/2f4939320eb1 > Android 動態升級  1.Android 外掛化 —— 指將

Android 淘氣三千傳之 —— 外掛的一點理解(上)

外掛化 這一篇主要是個人對外掛化涉及到的一些基礎知識的理解,內容都比較簡單: 包括以下內容: 目錄: 1、類載入機制 2、Binder機制 3、APP、四大元件的啟動流程 4、APK安裝過程 5、資源的載入過程 6、Hook

淺談AndroidSerializableParcelable使用區別

Android中序列化有兩種方式:Serializable以及Parcelable。其中Serializable是Java自帶的,而Parcelable是安卓專有的。 一、Serializable序列化 serializable使用比較簡單,只需要對某個類實現Serializable 介面即可。 Ser

android activity之間傳遞物件(Serializable Parcelable

Android中Intent中傳遞物件的方法, 一種是Bundle.putSerializable(Key,Object); 另一種是Bundle.putParcelable(Key, Object); 當然這些Object是有一定的條件的,前者是實現了Serializa

Android Plugin插樁式實現外掛開發(一)-實現原理及Activity外掛實現

1. 前言在現在一些大型的Android應用中都採用了外掛化的開發方式,比如美團,支付寶及我們常用的微信等採用了插修的化的開發方式來進行開發的,既然國內一流的網際網路公司都採用這樣的方式來開發那它一定能帶給開發部署大型應用帶來很大的便捷,那麼外掛化的優勢在哪裡呢?1.1 外掛

Android APP熱更新中的外掛(Hook技術:反射或動態代理),Demo (2)

Dexposed、AndFix,(HotFix)Sophix,Qzone超級補丁的類Nuwa方式,微信的Tinker, 大眾點評的nuwa、百度金融的rocooFix, 餓了麼的amigo以及美團的robust、騰訊的Bugly熱更新。 -- 熱更新  DexPathLis

[Android]用架構師角度看外掛(3)-Replugin 需要佔坑跳轉?

一.佔坑什麼是佔坑?為什麼要佔坑?Android外掛化中,從一個外掛Activity跳轉到不同外掛的Activity的時候,是否可以能正常跳轉成功?宣告Activity需要配置什麼?宣告Activity是需要AndroidManifest中宣告,但是外掛是依賴於宿主的,外掛聲明瞭Activity,但是外掛的A