溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Java默認(rèn)提供的序列化有哪些

發(fā)布時(shí)間:2022-01-07 09:24:52 來源:億速云 閱讀:210 作者:iii 欄目:軟件技術(shù)

本篇內(nèi)容介紹了“Java默認(rèn)提供的序列化有哪些”的有關(guān)知識(shí),在實(shí)際案例的操作過程中,不少人都會(huì)遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

序列化(編碼)是將對(duì)象序列化為二進(jìn)制形式(字節(jié)數(shù)組),主要用于網(wǎng)絡(luò)傳輸、數(shù)據(jù)持久化等;而反序列化(解碼)則是將從網(wǎng)絡(luò)、磁盤等讀取的字節(jié)數(shù)組還原成原始對(duì)象,主要用于網(wǎng)絡(luò)傳輸對(duì)象的解碼,以便完成遠(yuǎn)程調(diào)用。

影響序列化性能的關(guān)鍵因素:序列化后的碼流大?。ňW(wǎng)絡(luò)帶寬的占用)、序列化的性能(CPU資源占用);是否支持跨語言(異構(gòu)系統(tǒng)的對(duì)接和開發(fā)語言切換)。

Java默認(rèn)提供的序列化:無法跨語言、序列化后的碼流太大、序列化的性能差

XML,優(yōu)點(diǎn):人機(jī)可讀性好,可指定元素或特性的名稱。缺點(diǎn):序列化數(shù)據(jù)只包含數(shù)據(jù)本身以及類的結(jié)構(gòu),不包括類型標(biāo)識(shí)和程序集信息;只能序列化公共屬性和字段;不能序列化方法;文件龐大,文件格式復(fù)雜,傳輸占帶寬。適用場(chǎng)景:當(dāng)做配置文件存儲(chǔ)數(shù)據(jù),實(shí)時(shí)數(shù)據(jù)轉(zhuǎn)換。

JSON,是一種輕量級(jí)的數(shù)據(jù)交換格式,優(yōu)點(diǎn):兼容性高、數(shù)據(jù)格式比較簡(jiǎn)單,易于讀寫、序列化后數(shù)據(jù)較小,可擴(kuò)展性好,兼容性好、與XML相比,其協(xié)議比較簡(jiǎn)單,解析速度比較快。缺點(diǎn):數(shù)據(jù)的描述性比XML差、不適合性能要求為ms級(jí)別的情況、額外空間開銷比較大。適用場(chǎng)景(可替代XML):跨防火墻訪問、可調(diào)式性要求高、基于Web browser的Ajax請(qǐng)求、傳輸數(shù)據(jù)量相對(duì)小,實(shí)時(shí)性要求相對(duì)低(例如秒級(jí)別)的服務(wù)。

Fastjson,采用一種“假定有序快速匹配”的算法。優(yōu)點(diǎn):接口簡(jiǎn)單易用、目前java語言中最快的json庫。缺點(diǎn):過于注重快,而偏離了“標(biāo)準(zhǔn)”及功能性、代碼質(zhì)量不高,文檔不全。適用場(chǎng)景:協(xié)議交互、Web輸出、Android客戶端

Thrift,不僅是序列化協(xié)議,還是一個(gè)RPC框架。優(yōu)點(diǎn):序列化后的體積小, 速度快、支持多種語言和豐富的數(shù)據(jù)類型、對(duì)于數(shù)據(jù)字段的增刪具有較強(qiáng)的兼容性、支持二進(jìn)制壓縮編碼。缺點(diǎn):使用者較少、跨防火墻訪問時(shí),不安全、不具有可讀性,調(diào)試代碼時(shí)相對(duì)困難、不能與其他傳輸層協(xié)議共同使用(例如HTTP)、無法支持向持久層直接讀寫數(shù)據(jù),即不適合做數(shù)據(jù)持久化序列化協(xié)議。適用場(chǎng)景:分布式系統(tǒng)的RPC解決方案

Avro,Hadoop的一個(gè)子項(xiàng)目,解決了JSON的冗長(zhǎng)和沒有IDL的問題。優(yōu)點(diǎn):支持豐富的數(shù)據(jù)類型、簡(jiǎn)單的動(dòng)態(tài)語言結(jié)合功能、具有自我描述屬性、提高了數(shù)據(jù)解析速度、快速可壓縮的二進(jìn)制數(shù)據(jù)形式、可以實(shí)現(xiàn)遠(yuǎn)程過程調(diào)用RPC、支持跨編程語言實(shí)現(xiàn)。缺點(diǎn):對(duì)于習(xí)慣于靜態(tài)類型語言的用戶不直觀。適用場(chǎng)景:在Hadoop中做Hive、Pig和MapReduce的持久化數(shù)據(jù)格式。

Protobuf,將數(shù)據(jù)結(jié)構(gòu)以.proto文件進(jìn)行描述,通過代碼生成工具可以生成對(duì)應(yīng)數(shù)據(jù)結(jié)構(gòu)的POJO對(duì)象和Protobuf相關(guān)的方法和屬性。優(yōu)點(diǎn):序列化后碼流小,性能高、結(jié)構(gòu)化數(shù)據(jù)存儲(chǔ)格式(XML JSON等)、通過標(biāo)識(shí)字段的順序,可以實(shí)現(xiàn)協(xié)議的前向兼容、結(jié)構(gòu)化的文檔更容易管理和維護(hù)。缺點(diǎn):需要依賴于工具生成代碼、支持的語言相對(duì)較少,官方只支持Java 、C++ 、python。適用場(chǎng)景:對(duì)性能要求高的RPC調(diào)用、具有良好的跨防火墻的訪問屬性、適合應(yīng)用層對(duì)象的持久化

其它

protostuff 基于protobuf協(xié)議,但不需要配置proto文件,直接導(dǎo)包即可 Jboss marshaling 可以直接序列化java類, 無須實(shí)java.io.Serializable接口 Message pack 一個(gè)高效的二進(jìn)制序列化格式 Hessian 采用二進(jìn)制協(xié)議的輕量級(jí)remoting onhttp工具 kryo 基于protobuf協(xié)議,只支持java語言,需要注冊(cè)(Registration),然后序列化(Output),反序列化(Input)

“Java默認(rèn)提供的序列化有哪些”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI