Android讀書筆記-2 序列化

為什么我們需要序列化

序列化的原因基本可以歸納為以下三種情況:
1.永久性保存對象舔示,保存對象的字節(jié)序列到本地文件中彪置;
2.對象在網(wǎng)絡(luò)中傳遞撑螺;
3.對象在IPC間傳遞里伯。

android序列化方式

  • Java 通過實現(xiàn)Serializable的接口來實現(xiàn)序列化。
  • Android 原生序列化接口中Parcelable接口渤闷。

兩者之間的區(qū)別

  • 內(nèi)存序列化 Serializable在序列化的時候會產(chǎn)生大量的碎片的臨時變量疾瓮,從而引起頻繁的內(nèi)存GC,相比Parcelable 更適合在內(nèi)存中作為序列化傳輸數(shù)據(jù)飒箭。
  • 網(wǎng)絡(luò)序列化以及硬盤序列化 不能能使用在要將數(shù)據(jù)存儲在磁盤上的情況(如:永久性保存對象狼电,保存對象的字節(jié)序列到本地文件中)蜒灰,因為Parcel本質(zhì)上為了更好的實現(xiàn)對象在IPC間傳遞,并不是一個通用的序列化機(jī)制肩碟,當(dāng)改變?nèi)魏蜳arcel中數(shù)據(jù)的底層實現(xiàn)都可能導(dǎo)致之前的數(shù)據(jù)不可讀取强窖,所以此時還是建議使用Serializable 。

Serializable實現(xiàn)以及使用

android使用Serializable來序列化非常的簡單削祈, 只需要實現(xiàn)Serializable接口翅溺, 剩下系統(tǒng)變自動會完成。
唯一需要注意的是serialVersionUID 序列化的版本編號髓抑,Java的序列化機(jī)制是通過在運行時判斷類的serialVersionUID來驗證版本一致性的咙崎。在進(jìn)行反序列化時,JVM會把傳來的字節(jié)流中的serialVersionUID與本地相應(yīng)實體(類)的serialVersionUID進(jìn)行比較吨拍,如果相同就認(rèn)為是一致的褪猛,可以進(jìn)行反序列化,否則就會出現(xiàn)序列化版本不一致的異常羹饰。

Parcelable實現(xiàn)以及使用

相比Serializable來說 Parcelable的實現(xiàn)比較的復(fù)雜伊滋。

  1. 實現(xiàn)Parcelable接口
  2. 重寫writeToParcel方法,將你的對象序列化為一個Parcel對象队秩,即:將類的數(shù)據(jù)寫入外部提供的Parcel中笑旺,打包需要傳遞的數(shù)據(jù)到Parcel容器保存,以便從Parcel容器獲取數(shù)據(jù)刹碾。
  3. 重寫describeContents方法燥撞,內(nèi)容接口描述,默認(rèn)返回0即可迷帜。
  4. 實例化靜態(tài)內(nèi)部對象CREATOR實現(xiàn)接口Parcelable.Creator 物舒。
  • 注意:若將Parcel看成是一個流,則先通過writeToParcel把對象寫到流里面戏锹,再通過createFromParcel從流里讀取對象冠胯,因此類實現(xiàn)的寫入順序和讀出順序必須一致。*

FAQ :當(dāng)項目中使用的時候 出現(xiàn)的一個錯誤: 傳遞對象列表,具體代碼如下: 需要注意的是锦针,若List personList = new ArrayList();則會報錯荠察,因為下面調(diào)用的putParcelableArrayList()函數(shù)其中一個參數(shù)的類型為ArrayList。 所以變量應(yīng)該聲明為ArrayList即可奈搜。

// parcelable對象List傳遞方法
public void setParcelableListMethod() {
ArrayList<Person> personList = new ArrayList<Person>();
Person person1 = new Person();
person1.setmName("王合づ瑁康");

person1.setmSex("男");
person1.setmAge(45);
personList.add(person1);
Person person2 = new Person();
person2.setmName("薛岳");
person2.setmSex("男");
person2.setmAge(15);
personList.add(person2);
Intent intent = new Intent(this, PersonTest.class);
Bundle bundle = new Bundle();
bundle.putParcelableArrayList(PAR_LIST_KEY, personList);
intent.putExtras(bundle);
startActivity(intent);
}
// parcelable對象獲取方法
public ArrayList<Person> getParcelableMethod(){
ArrayList<Person> mPersonList = getIntent().getParcelableExtra(PAR_LIST_KEY);
return mPersonList;
}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市馋吗,隨后出現(xiàn)的幾起案子焕盟,更是在濱河造成了極大的恐慌,老刑警劉巖宏粤,帶你破解...
    沈念sama閱讀 206,723評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件脚翘,死亡現(xiàn)場離奇詭異灼卢,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)来农,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,485評論 2 382
  • 文/潘曉璐 我一進(jìn)店門鞋真,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人沃于,你說我怎么就攤上這事涩咖。” “怎么了揽涮?”我有些...
    開封第一講書人閱讀 152,998評論 0 344
  • 文/不壞的土叔 我叫張陵抠藕,是天一觀的道長。 經(jīng)常有香客問我蒋困,道長盾似,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,323評論 1 279
  • 正文 為了忘掉前任雪标,我火速辦了婚禮零院,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘村刨。我一直安慰自己告抄,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 64,355評論 5 374
  • 文/花漫 我一把揭開白布嵌牺。 她就那樣靜靜地躺著打洼,像睡著了一般。 火紅的嫁衣襯著肌膚如雪逆粹。 梳的紋絲不亂的頭發(fā)上募疮,一...
    開封第一講書人閱讀 49,079評論 1 285
  • 那天,我揣著相機(jī)與錄音僻弹,去河邊找鬼阿浓。 笑死,一個胖子當(dāng)著我的面吹牛蹋绽,可吹牛的內(nèi)容都是我干的芭毙。 我是一名探鬼主播,決...
    沈念sama閱讀 38,389評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼卸耘,長吁一口氣:“原來是場噩夢啊……” “哼退敦!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起蚣抗,我...
    開封第一講書人閱讀 37,019評論 0 259
  • 序言:老撾萬榮一對情侶失蹤苛聘,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后忠聚,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體设哗,經(jīng)...
    沈念sama閱讀 43,519評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,971評論 2 325
  • 正文 我和宋清朗相戀三年两蟀,在試婚紗的時候發(fā)現(xiàn)自己被綠了网梢。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,100評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡赂毯,死狀恐怖战虏,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情党涕,我是刑警寧澤烦感,帶...
    沈念sama閱讀 33,738評論 4 324
  • 正文 年R本政府宣布,位于F島的核電站膛堤,受9級特大地震影響手趣,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜肥荔,卻給世界環(huán)境...
    茶點故事閱讀 39,293評論 3 307
  • 文/蒙蒙 一绿渣、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧燕耿,春花似錦中符、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,289評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至蚜锨,卻和暖如春档插,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背踏志。 一陣腳步聲響...
    開封第一講書人閱讀 31,517評論 1 262
  • 我被黑心中介騙來泰國打工阀捅, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人针余。 一個月前我還...
    沈念sama閱讀 45,547評論 2 354
  • 正文 我出身青樓饲鄙,卻偏偏與公主長得像,于是被迫代替她去往敵國和親圆雁。 傳聞我的和親對象是個殘疾皇子忍级,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,834評論 2 345

推薦閱讀更多精彩內(nèi)容