1. 程式人生 > >Parcelable和Serializable的區別

Parcelable和Serializable的區別

我們知道andriod在本地儲存物件或者用intent傳遞物件的時候,需要把物件序列化才能夠對其進行操作,在java中我們所熟悉的是物件實現serializable介面即可,而在andriod中官方推薦使用的是Parcelable介面,兩者有什麼區別呢? 1.Serializable是java中的序列化介面,使用簡單但是開銷比較大,序列化合反序列化需要大量的I/O操作。 2.Parcelable是andriod中的序列化方式,因此有更適合andriod平臺的有點是序列化合反序列化的效率高,但是其缺點就是使用起來比較麻煩,使用過Parcelable介面的同學應該知道實現Parcelable介面需要有序列化,反序列化,內容描述符這幾個過程。 1).序列化由writeToParcel方法來完成,最終通過Parcel中的惡意系列write方法來完成的。 2).反序列化功能則由CREATOR來完成,其內部標明瞭如何建立序列化物件和陣列,並通過Parcel的一系列read方法來完成反序列化過程;內容描述符功能有describeCoontnets方法來完成,幾乎在所有情況下這個方法東應該返回0,僅噹噹前物件中存在檔案描述符時,返回1。另外需要注意的是,在序列化物件的類裡面如果其它可序列化物件,則序列化過程需要傳遞當前縣城的上下文類載入器,否則彙報無法找到類的錯誤。 3).舉個栗子:
public class Man implements Parcelable{
public int userId;
public String userName;
public boolean isMale;
public Dog dog;
public User(int userId,String userName,boolean isGood){
this.userId=userId;
this.userName=userName;
this.isMale=isMale;
}
public int describeContents(){
return 0;
}
public void writeToParcel(Parcel out,int flags){
out.writeInt(userId);
out.writeString (userName);
out.writeInt(isMale?1:0);
out.writeparcelable(dog,0);
}
public static final Parcelable.Creator<Man> CREATOR=new Parcelable.Creator<Man>(){
public User createFromParcel(Parcel in){
return new Man(in);
}
public Man[] newArray(int size){
return new Man[size];
}
};
private Man(Parcel in){
userId=in.readInt();
userName=in.readString();
isMale=in.readInt()==1;
book=in.readParcelable(Thrad.currentThread().getContextClassLoader());
}
}
參考資料:Andriod 開發藝術探索

相關推薦

ParcelableSerializable區別

我們知道andriod在本地儲存物件或者用intent傳遞物件的時候,需要把物件序列化才能夠對其進行操作,在java中我們所熟悉的是物件實現serializable介面即可,而在andriod中官方推薦使用的是Parcelable介面,兩者有什麼區別呢? 1.Seriali

Android ParcelableSerializable區別

本文主要介紹Parcelable和Serializable的作用、效率、區別及選擇,關於Serializable的介紹見Java 序列化的高階認識。 1、作用 Serializable的作用是為了儲存物件的屬性到本地檔案、資料庫、網路流、rmi以方便資料傳輸,當然這

小白秒懂系列之 Parcelable Serializable 的 使用 以及他們的 區別

對這兩個單詞我想都不陌生吧,都知道是用來序列化的,可是為什麼要序列化呢? 永久性儲存 物件,儲存物件的位元組序列到本地檔案; 序列化的物件可以在網路中傳遞; 序列化的物件可以在程序間傳遞。 那麼我們知道它的用處了,可是如何選擇呢?(Parcelable簡

Android系統中ParcelableSerializable區別

進行Android開發的時候,我們都知道不能將物件的引用傳給Activities或者Fragments,我們需要將這些物件放到一個Intent或者Bundle裡面,然後再傳遞。 通過Android的API,我們知道有兩種選擇,即在傳遞物件時,需要對我們的物

android Activity之間資料傳遞 ParcelableSerializable介面的使用

Activity之間傳資料時,為了避免麻煩,往往會將一些值封裝成物件,然後將整個物件傳遞過去。傳物件的時候有兩種情況,一種是實現Parcelable介面,一種是實現Serializable介面。 0、解釋兩種介面: 1)實現Serializable介面是JavaSE本身就支

序列化Parcelable Serializable

Serializable、Parcelable 都可實現序列化,並用於Intent傳遞資料。 Serializable是java的序列化介面,使用簡單但開銷大,序列化和反序列化過程需大量I/O操作。 Parcelable是Android的序列化方式,因此更適用於Android平臺。使用相對前者麻

ParcelableSerializable的理解

很少在部落格上敲文字了,都是直接上程式碼就結束了,今天抽點時間寫點東西。 我們知道在一般情況下,在兩個或者多個Activity中傳遞資料中通過Intent的函式只能傳遞基本資料型別,那當我們想傳輸複雜的類的資料型別時候,我們就必須用到Parcelable

讀書筆記——Intent資料傳輸(ParcelableSerializable

putExtra() 最常用的Intent資料傳輸方式,簡單,在獲取的時候getIntent().getXXXExtra(),根據鍵值對獲取到對應的值。簡單方便。 缺點: 所支援的型別有限,比如不可傳遞自定義物件等。 傳遞物件——S

GETPOST區別總結

get 、post 、區別一、GET和POST區別的普遍看法:HTTP 定義了與服務器交互的不同方法,最常用的有4種,Get、Post、Put、Delete,如果我換一下順序就好記了,Put(增),Delete(刪),Post(改),Get(查),即增刪改查,下面簡單敘述一下:1)Get, 它用於獲取信息,註

JS中const、varlet區別

方法 pre 命令 con 使用 它的 comm 作用 影響 在JavaScript中有三種聲明變量的方式:var、let、const。 1.const 聲明創建一個只讀的常量。這不意味著常量指向的值不可變,而是變量標識符的值只能賦值一次,必須初始化。 const b

equals == 的區別

strong 都是 什麽 brush -s 新的 equals方法 實現 繼承 首先 看比較的對象是否為字符串,若為(String)字符串用equals 比較, 比較的是他們的值。相同返回 true ,不相同返回false. package one; p

mybatis中的#$的區別

背景 插入 trac sql註入 -m .com article 參數 -s 1. #將傳入的數據都當成一個字符串,會對自動傳入的數據加一個雙引號。如:order by #user_id#,如果傳入的值是111,那麽解析成sql時的值為order by "111", 如果傳

hibernate中hql語句中listiterate區別

每次 hibernate 寫入 所有 讀取 條件 iter 查詢 hql 1.使用list()方法獲取查詢結果,每次發出一條語句,獲取全部數據。2.使用iterate()方法獲取查詢結果,先發出一條SQL語句用來查詢滿足條件數據的id,然後依次按照這些id查詢記錄,也就是要

java中ArrayListLinkedList區別

插入 list 新的 查找 arr tro 基於 列表 時間復雜度 ArrayList和LinkedList最主要的區別是基於不同數據結構 ArrayList是基於動態數組的數據結構,LinkedList基於鏈表的數據結構,針對這點,從時間復雜度和空間復雜度來看主要區別:

mysql中replicate_wild_do_tablereplicate_do_db區別

lan rep cati mil 多人 pan think lte 避免 使用replicate_do_db和replicate_ignore_db時有一個隱患,跨庫更新時會出錯。 如在Master(主)服務器上設置 replicate_do_db=test(my.conf

2000行之宏中###的區別

ret fun color bsp nbsp urn div def include #include<stdio.h> #define Fun(a,b) a##b int main() { x=‘H‘; y=‘W‘; printf("

HTML提交方式postget區別(實驗)

des url action 通過 性別 清除數據 map pass pack HTML提交方式post和get區別(實驗) 一、post和get區別 get提交,提交的信息都顯示在地址欄中。 post提交,提交的信息不顯示地址欄中,顯示在消息體中。 二、客戶端代碼

stringbuffer stringbuilder區別

uil build 線程 區別 單線程 線程安全 多線程操作 buffer 少量數據 stringbuffer 和 stringbuilder速度 小於 線程安全 線程非安全 單線程操作

水晶頭鍍金30U50區別

style 價格 -1 font 質量 穩定性 tex 穩定 size U是厚度單位,1μm≈40u。一般來說鍍金越厚,越耐插播,耐酸堿腐蝕,觸點壽命越長,傳輸穩定性越好,價格越貴。但是事實上,鍍金層的質量,或者說鍍金對水晶頭質量的影響,跟工藝的關系更密切。水晶頭鍍金30U

MyBatis Mapper.xml文件中 $#的區別

優先 註入 sql註入 jdb 防止 自動 || myba 由於 1.優先使用#{paramName,jdbcType=VARCHAR} 寫法,除了可以防止sql註入以外,它還能在參數裏含有單引號的時候自動轉義, 而${paramName}由於是類似於拼接sql的寫法,不具