Android序列化方式可不是僅僅只有兩種

提到序列化蝴乔,很多選手腦袋冒出的第一個聲音 —— “Parcelable和Serializable”糊饱。
其實Android項目中可以使用的序列化方式不止這兩個,有一些你可能正在用,但是并不知道這種方式屬于序列化耐齐。

一、什么是序列化

在日常生活中“序列化”并不是一個常見的詞匯。對于這種看上去高大上的詞語如果不能了解透徹埠况,很容易成為你研究新神通的阻礙耸携。知其然并知其所以然,才能一通百通辕翰,不讓代碼限制你的跳躍性思維夺衍。

1.定義:

百度百科:

序列化 (Serialization) 將對象的狀態(tài)信息轉(zhuǎn)換為可以存儲或傳輸?shù)男问降倪^程。在序列化期間喜命,對象將其當(dāng)前狀態(tài)寫入到臨時或持久性存儲區(qū)沟沙。以后,可以通過從存儲區(qū)中讀取或反序列化對象的狀態(tài)壁榕,重新創(chuàng)建該對象矛紫。

維基百科:

序列化(serialization)在計算機科學(xué)的數(shù)據(jù)處理中,是指將數(shù)據(jù)結(jié)構(gòu)或?qū)ο鬆顟B(tài)轉(zhuǎn)換成可取用格式(例如存成文件牌里,存于緩沖含衔,或經(jīng)由網(wǎng)絡(luò)中發(fā)送),以留待后續(xù)在相同或另一臺計算機環(huán)境中二庵,能恢撤消先狀態(tài)的過程贪染。

與序列化相反的過程又稱為反序列化。

2.理解:

通俗的講:

序列化就是你朋友把電腦拆了催享,你把拆了的電腦組裝起來就是反序列化杭隙。而拆了的電腦可以扔到倉庫儲存,或者快遞郵寄傳輸因妙。

玄學(xué)著講:

序列化就是把有形化為無形痰憎,從無形化為有形恢復(fù)本來面目就是反序列化廉邑。無形不滅熬甫。

序列化是一個有規(guī)則的變化過程滤愕,反序列化則是有同樣但是相反的規(guī)則的變化過程睦霎。

3.圖解

序列化圖解
序列化圖解通俗版.jpg

二乏梁、序列化的目的

了解一個技術(shù)設(shè)計出來的目的逮栅,能幫你在需要的時候做出更好的選擇拐迁。比如當(dāng)你選擇用NestedScrollView還是ScrollView的時候官地,如果你知道NestedScrollView出現(xiàn)的目的是跟MD中的其他控件兼容怒详,那在里面嵌套RecycleView的時候你就應(yīng)該毫不猶豫的選擇NestedScrollView炉媒。

  1. 以某種存儲形式使自定義對象持久化;
  2. 將對象從一個地方傳遞到另一個地方昆烁。
  3. 使程序更具維護(hù)性吊骤。

通俗點講:

一些情況下,對象是不能直接傳輸?shù)木材幔枰蛄谢追邸=邮辗椒葱蛄谢玫皆瓕ο蟆?br> 一些情況下传泊,電腦是不方便直接郵寄的,需要拆了分開郵寄鸭巴。收件人重新組裝得到原電腦眷细。

三、序列化的用途

用途的介紹是不可能介紹全的奕扣,了解了定義和目的薪鹦,用在什么地方全憑你的喜好。就好像你知道了郵寄電腦可以把它拆了惯豆,你就應(yīng)該知道網(wǎng)購自行車也可以買被拆散的那種池磁。這也就是我前文中提到的“新神通”。

  1. 經(jīng)由電信線路傳輸數(shù)據(jù)的方法(通信)楷兽。
  2. 遠(yuǎn)程程序調(diào)用的方法地熄,例如在SOAP中。
  3. 檢測隨時間數(shù)據(jù)變動的方法芯杀。
  4. 存儲數(shù)據(jù)的方法(在數(shù)據(jù)庫或硬盤)端考。
  5. 從服務(wù)器獲取數(shù)據(jù)。
  6. Activity之間傳遞數(shù)據(jù)揭厚。
    等等...

思維再發(fā)散一點却特,你能想到更多,下面是維基百科中的例子:
商用軟件的出版商通常會將應(yīng)用軟件的序列化格式筛圆,當(dāng)作商業(yè)秘密裂明,以阻礙競爭對手生產(chǎn)可兼容的產(chǎn)品;有些會蓄意地混淆太援,或甚至將序列化數(shù)據(jù)作加密處理闽晦。

四、序列化格式

序列化需要規(guī)則提岔,如果你不知道序列化的規(guī)則仙蛉,也就不能反序列化。傳遞過來的序列化便沒有意義了碱蒙。到這里你也能知道序列化和加密的區(qū)別了荠瘪,加密是不一定需要解密的。
序列化格式多種多樣振亮,甚至可以自定義巧还。然而,互通可用性的要求應(yīng)用程序能夠理解彼此的序列化格式坊秸。

維基百科中有如下介紹:

20世紀(jì)80年代初的施樂網(wǎng)絡(luò)系統(tǒng)快遞技術(shù)影響了第一個廣泛采用的標(biāo)準(zhǔn)。Sun Microsystems在1987年發(fā)布了外部數(shù)據(jù)表示法(XDR)澎怒。90年代后期開始推動標(biāo)準(zhǔn)序列化的協(xié)議:XML(可擴展標(biāo)記語言)應(yīng)用于產(chǎn)生人類可讀的文字編碼褒搔。數(shù)據(jù)以這樣的編碼使存續(xù)的對象能有效用阶牍,無論相對于人是否可閱讀與理解,或與編程語言無關(guān)地傳遞給其它信息系統(tǒng)星瘾。它缺點是失去了扎實的編碼字節(jié)流走孽,但截至當(dāng)前技術(shù)上所提供大量的存儲和傳輸容量,使得文件大小的考量琳状,已不同于早期計算機科學(xué)的重視程度磕瓷。二進(jìn)制XML被提議作為一種妥協(xié)方式,它不能被純文本編輯器讀取念逞,但比一般XML更為扎實困食。在二十一世紀(jì)的Ajax技術(shù)網(wǎng)頁中,XML經(jīng)常應(yīng)用于結(jié)構(gòu)化數(shù)據(jù)在客端和伺服端之間的異步傳輸翎承。相較于XML硕盹,JSON是一種輕量級的純文字替代,也常用于網(wǎng)頁應(yīng)用中的客端-伺服端通信叨咖。JSON肇基于JavaScript語法所派生瘩例,但也廣為其它編程語言所支持。與JSON類似的另一個替代方案是YAML甸各,它包含加強序列化的功能垛贤,更“人性化”而且更扎實。這些功能包括標(biāo)記數(shù)據(jù)類型趣倾,支持非層次結(jié)構(gòu)式數(shù)據(jù)結(jié)構(gòu)聘惦,縮進(jìn)結(jié)構(gòu)化數(shù)據(jù)的選項以及多種形式的標(biāo)量數(shù)據(jù)引用的概念。

五誊酌、Android項目中可以使用的序列化方式不止Parcelable和Serializable

呼應(yīng)標(biāo)題部凑,現(xiàn)在你應(yīng)該知道為什么不止兩種方式了。序列化是一種技術(shù)碧浊,不僅僅一兩種方法涂邀。只要滿足定義,都可以被稱之為序列化箱锐。然后你便能想到:

  1. json也是一種序列化比勉。網(wǎng)絡(luò)請求用到那么多。
  2. 遠(yuǎn)古時代的xml也是序列化驹止。記不記得曾經(jīng)很火的博客主題“Android XML解析”浩聋?
    等等...

六、排查項目

了解了序列化的定義臊恋、目的衣洁,反觀我們自己的項目。

  1. 有些bean類又實現(xiàn)了Serializable抖仅,又用json解析構(gòu)建坊夫,真的有必要嗎砖第?
  2. 不同平臺之間json傳遞數(shù)據(jù),需要考慮平臺特性嗎环凿?
  3. Activity之間傳遞對象只能用Serializable嗎梧兼?json行不行?
    等等...

最后智听,希望這篇文章能幫助各位選手在日常工作中和新神通的研發(fā)中能更合理更擅長的使用序列化和反序列化羽杰。
如果文章中您發(fā)現(xiàn)了什么錯誤,有什么補充到推,歡迎留言探討考赛。朋友的QQ群:511276976

還有,打兩個廣告环肘,自己的項目:
1欲虚、【拇指先生】https://github.com/Reone/Mrthumb 關(guān)于視頻縮略圖
2、【KVStorage】https://github.com/Reone/KVStorage 關(guān)于key-value形式使用數(shù)據(jù)庫

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末悔雹,一起剝皮案震驚了整個濱河市复哆,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌腌零,老刑警劉巖梯找,帶你破解...
    沈念sama閱讀 206,214評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異益涧,居然都是意外死亡锈锤,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評論 2 382
  • 文/潘曉璐 我一進(jìn)店門闲询,熙熙樓的掌柜王于貴愁眉苦臉地迎上來久免,“玉大人,你說我怎么就攤上這事扭弧⊙掷眩” “怎么了?”我有些...
    開封第一講書人閱讀 152,543評論 0 341
  • 文/不壞的土叔 我叫張陵鸽捻,是天一觀的道長呼巴。 經(jīng)常有香客問我,道長御蒲,這世上最難降的妖魔是什么衣赶? 我笑而不...
    開封第一講書人閱讀 55,221評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮厚满,結(jié)果婚禮上府瞄,老公的妹妹穿的比我還像新娘。我一直安慰自己碘箍,他們只是感情好摘能,可當(dāng)我...
    茶點故事閱讀 64,224評論 5 371
  • 文/花漫 我一把揭開白布续崖。 她就那樣靜靜地躺著敲街,像睡著了一般团搞。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上多艇,一...
    開封第一講書人閱讀 49,007評論 1 284
  • 那天逻恐,我揣著相機與錄音,去河邊找鬼峻黍。 笑死复隆,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的姆涩。 我是一名探鬼主播挽拂,決...
    沈念sama閱讀 38,313評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼骨饿!你這毒婦竟也來了亏栈?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,956評論 0 259
  • 序言:老撾萬榮一對情侶失蹤宏赘,失蹤者是張志新(化名)和其女友劉穎绒北,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體察署,經(jīng)...
    沈念sama閱讀 43,441評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡闷游,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,925評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了贴汪。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片脐往。...
    茶點故事閱讀 38,018評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖扳埂,靈堂內(nèi)的尸體忽然破棺而出业簿,到底是詐尸還是另有隱情,我是刑警寧澤聂喇,帶...
    沈念sama閱讀 33,685評論 4 322
  • 正文 年R本政府宣布辖源,位于F島的核電站,受9級特大地震影響希太,放射性物質(zhì)發(fā)生泄漏克饶。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,234評論 3 307
  • 文/蒙蒙 一誊辉、第九天 我趴在偏房一處隱蔽的房頂上張望矾湃。 院中可真熱鬧,春花似錦堕澄、人聲如沸邀跃。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽拍屑。三九已至途戒,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間僵驰,已是汗流浹背喷斋。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留蒜茴,地道東北人星爪。 一個月前我還...
    沈念sama閱讀 45,467評論 2 352
  • 正文 我出身青樓,卻偏偏與公主長得像粉私,于是被迫代替她去往敵國和親顽腾。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,762評論 2 345

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

  • JAVA序列化機制的深入研究 對象序列化的最主要的用處就是在傳遞,和保存對象(object)的時候,保證對象的完整...
    時待吾閱讀 10,837評論 0 24
  • Android數(shù)據(jù)序列化總結(jié) 目錄介紹 1.序列化簡單介紹1.1 序列化的概念1.2 序列化是做什么用的1.3 序...
    楊充211閱讀 1,072評論 0 5
  • 關(guān)于Mongodb的全面總結(jié) MongoDB的內(nèi)部構(gòu)造《MongoDB The Definitive Guide》...
    中v中閱讀 31,898評論 2 89
  • 01 有一天晚上臨睡前诺核,四歲的小米突然哇啦哇啦哭起來抄肖,哭到鼻頭堵塞,抽抽著氣都喘不過來猪瞬。 我嚇了一大跳憎瘸,趕緊問她你...
    柒菇qigu閱讀 392評論 1 3
  • 結(jié)構(gòu)性起源于建筑,而結(jié)構(gòu)性思維陈瘦,一般看不到幌甘,都發(fā)生在腦子里,但對于我們表達(dá)痊项,思考各方面都有借鑒作用锅风。 首先,我們來...
    一帆風(fēng)順adam閱讀 685評論 0 0