日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java序列化 - 分析不同序列化方式的优劣

發(fā)布時間:2024/2/28 java 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java序列化 - 分析不同序列化方式的优劣 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

1.序列化簡介

1.1 定義

序列化是將對象狀態(tài)轉(zhuǎn)換為可保持或傳輸?shù)母袷降倪^程。與序列化相對的是反序列化,它將流轉(zhuǎn)換為對象。這兩個過程結(jié)合起來,可以輕松地存儲和傳輸數(shù)據(jù)

1.2 序列化的目的

通過序列化以字節(jié)流的形式使對象在網(wǎng)絡中進行傳遞和接收

永久性保存對象,保存對象的字節(jié)序列到本地文件或者數(shù)據(jù)庫中

通過序列化在進程間傳遞對象

深拷貝對象

跨語言傳遞數(shù)據(jù)

1.3 序列化常見的方式

是否跨語言:

生成的中間文件二進制流不同:

2.常見的序列化方式特點

2.1 JDK

參考腦圖

2.2 JSON

Jackson

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

Gson

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

FastJson

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

京東:由于FastJSON安全漏洞,大促期間緊急上線(一般情況下大促是不允許上線的)

2.3 kryo

1.速度快,序列化后體積小 2.跨語言支持較復雜

2.4 Protobuf

1.結(jié)構化數(shù)據(jù)存儲格式(xml,json等) 2.高性能編解碼技術 3.語言和平臺無關,擴展性好 4.支持java,C++,Python三種語言。

2.5 hessian

1.默認支持跨語言 2.較慢

2.6 Thrift

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

2.7 fst

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

2.8 MsgPack

官網(wǎng):https://msgpack.org redis中使用此標準 1.速度快 2.序列化手的數(shù)據(jù)占用空間小 3.中間轉(zhuǎn)換的是字符數(shù)組,不方便存儲到文件之中 4.性能不夠穩(wěn)定(要求字段順序一致,刪減字段都需要注意)

京東:一開始使用的MsgPack,添加字段通常不用Http,而是直接引jar包,在添加字段時,要加載最后,不能插在字段中間。多人添加字段時,合并分支誰也不知道誰先加的,字段又被頂上去了。造成過一些線上事故

2.9 Avro

hadoop研發(fā)序列化 支持RPC

3 各大框架序列化方式

3.1 dobbo

通訊協(xié)議:dobbo協(xié)議,rmi協(xié)議,hessian協(xié)議,http協(xié)議,webservice協(xié)議 序列化方式:hessian,jdk,json,soap,kryo,fst,Protobuf(新版本支持),kryo

3.2 springcloud

通訊協(xié)議:http 序列化方式:json

3 性能測試

3.1 性能衡量指標

不同的序列化方式,本身設計就是滿足不同的應用場景,可序列化的數(shù)據(jù)類型,比如是否支持 StringBuffer和StringBuilder 等,所以單獨對比速度快慢,也不太合理,但大體上衡量標準可以參考如下

1.是否支持跨語言,支持語種是否豐富 2.編碼后的碼流 3.編解碼的性能 4.類庫是否小巧,API使用是否方便 5.使用者開發(fā)的工作量和難度。

性能參考:
https://blog.csdn.net/Brady74/article/details/90983288?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase

https://github.com/eishay/jvm-serializers

其中:JSON類庫,更適用于業(yè)務場景的開發(fā),類的拷貝復制,不適合網(wǎng)絡傳輸,性能低于其他類別的序列化方式

其他的類庫,更傾向于中間件的設計,網(wǎng)絡傳輸

總結(jié)

以上是生活随笔為你收集整理的Java序列化 - 分析不同序列化方式的优劣的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。