java序列化框架對(duì)比

目錄

jdk 自帶對(duì)象序列化類ObjectInput(Out)Stream

1.無(wú)法跨語(yǔ)言。這應(yīng)該是java序列化最致命的問(wèn)題了。由于java序列化是java內(nèi)部私有的協(xié)議,其他語(yǔ)言不支持,導(dǎo)致別的語(yǔ)言無(wú)法反序列化,這嚴(yán)重阻礙了它的應(yīng)用。
2.序列后的碼流太大。java序列化的大小是二進(jìn)制編碼的5倍多!
3.序列化性能太低。java序列化的性能只有二進(jìn)制編碼的6.17倍,可見(jiàn)java序列化性能實(shí)在太差了。

google的Protobuf

1.結(jié)構(gòu)化數(shù)據(jù)存儲(chǔ)格式(xml,json等)
2.高性能編解碼技術(shù)
3.語(yǔ)言和平臺(tái)無(wú)關(guān),擴(kuò)展性好
4.支持java,C++,Python三種語(yǔ)言。

faceBook的Thrift

1.Thrift支持多種語(yǔ)言(C++,C#,Cocoa,Erlag,Haskell,java,Ocami,Perl,PHP,Python,Ruby,和SmallTalk)
2.Thrift適用了組建大型數(shù)據(jù)交換及存儲(chǔ)工具,對(duì)于大型系統(tǒng)中的內(nèi)部數(shù)據(jù)傳輸,相對(duì)于Json和xml在性能上和傳輸大小上都有明顯的優(yōu)勢(shì)。
3.Thrift支持三種比較典型的編碼方式。(通用二進(jìn)制編碼,壓縮二進(jìn)制編碼,優(yōu)化的可選字段壓縮編解碼)

kryo

1.速度快,序列化后體積小
2.跨語(yǔ)言支持較復(fù)雜

hessian

1.默認(rèn)支持跨語(yǔ)言
2.較慢

fst

fst是完全兼容JDK序列化協(xié)議的系列化框架,序列化速度大概是JDK的4-10倍,大小是JDK大小的1/3左右。

序列化成json

開(kāi)源的Jackson

相比json-lib框架,Jackson所依賴的jar包較少,簡(jiǎn)單易用并且性能也要相對(duì)高些。而且Jackson社區(qū)相對(duì)比較活躍,更新速度也比較快。Jackson對(duì)于復(fù)雜類型的json轉(zhuǎn)換bean會(huì)出現(xiàn)問(wèn)題,一些集合Map,List的轉(zhuǎn)換出現(xiàn)問(wèn)題。Jackson對(duì)于復(fù)雜類型的bean轉(zhuǎn)換Json,轉(zhuǎn)換的json格式不是標(biāo)準(zhǔn)的Json格式

Google的Gson

Gson是目前功能最全的Json解析神器,Gson當(dāng)初是為因應(yīng)Google公司內(nèi)部需求而由Google自行研發(fā)而來(lái),但自從在2008年五月公開(kāi)發(fā)布第一版后已被許多公司或用戶應(yīng)用。Gson的應(yīng)用主要為toJson與fromJson兩個(gè)轉(zhuǎn)換函數(shù),無(wú)依賴,不需要例外額外的jar,能夠直接跑在JDK上。而在使用這種對(duì)象轉(zhuǎn)換之前需先創(chuàng)建好對(duì)象的類型以及其成員才能成功的將JSON字符串成功轉(zhuǎn)換成相對(duì)應(yīng)的對(duì)象。類里面只要有g(shù)et和set方法,Gson完全可以將復(fù)雜類型的json到bean或bean到j(luò)son的轉(zhuǎn)換,是JSON解析的神器。
Gson在功能上面無(wú)可挑剔,但是性能上面比FastJson有所差距。

阿里巴巴的FastJson

Fastjson是一個(gè)Java語(yǔ)言編寫的高性能的JSON處理器,由阿里巴巴公司開(kāi)發(fā)。無(wú)依賴,不需要例外額外的jar,能夠直接跑在JDK上。FastJson在復(fù)雜類型的Bean轉(zhuǎn)換Json上會(huì)出現(xiàn)一些問(wèn)題,可能會(huì)出現(xiàn)引用的類型,導(dǎo)致Json轉(zhuǎn)換出錯(cuò),需要制定引用。FastJson采用獨(dú)創(chuàng)的算法,將parse的速度提升到極致,超過(guò)所有json庫(kù)。

protostuff也許是最佳選擇。protostuff相比于kyro還有一個(gè)額外的好處,就是如果序列化之后,反序列化之前這段時(shí)間內(nèi),java class增加了字段(這在實(shí)際業(yè)務(wù)中是無(wú)法避免的事情),kyro就廢了。 但是protostuff只要保證新字段添加在類的最后,而且用的是sun系列的JDK, 是可以正常使用的。因此,如果序列化是用在緩存等場(chǎng)景下,序列化對(duì)象需要存儲(chǔ)很久,也就只能選擇protostuff了。

性能對(duì)比

Ref:
https://blog.csdn.net/fenglongmiao/article/details/79425218
性能:http://developer.51cto.com/art/201506/480273.htm

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容