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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

avro和java原生序列化的区别,java原生序列化和Kryo序列化性能比较

發(fā)布時間:2025/3/12 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 avro和java原生序列化的区别,java原生序列化和Kryo序列化性能比较 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

簡介

最近幾年,各種新的高效序列化方式層出不窮,不斷刷新序列化性能的上限,最典型的包括:

專門針對Java語言的:Kryo,FST等等

跨語言的:Protostuff,ProtoBuf,Thrift,Avro,MsgPack等等

這些序列化方式的性能多數(shù)都顯著優(yōu)于hessian2(甚至包括尚未成熟的dubbo序列化)。有鑒于此,我們?yōu)閐ubbo引入Kryo和FST這 兩種高效Java序列化實現(xiàn),來逐步取代hessian2。其中,Kryo是一種非常成熟的序列化實現(xiàn),已經在Twitter、Groupon、 Yahoo以及多個著名開源項目(如Hive、Storm)中廣泛的使用。而FST是一種較新的序列化實現(xiàn),目前還缺乏足夠多的成熟使用案例,但它還是非 常有前途的,下面我們比較下,java原生序列化Kryo序列化性能比較

1、實體類 Simple.java

packagebhz.entity;importjava.io.Serializable;importjava.util.Map;public class Simple implementsSerializable

{private static final long serialVersionUID = -4914434736682797743L;privateString name;private intage;private Mapmap;publicSimple(){

}public Simple(String name,int age,Mapmap){this.name =name;this.age =age;this.map =map;

}publicString getName() {returnname;

}public voidsetName(String name) {this.name =name;

}public intgetAge() {returnage;

}public void setAge(intage) {this.age =age;

}public MapgetMap() {returnmap;

}public void setMap(Mapmap) {this.map =map;

}

}

2、java原生序列化 OriginalSerializable.java

packagebhz.test;importjava.io.FileInputStream;importjava.io.FileNotFoundException;importjava.io.FileOutputStream;importjava.io.IOException;importjava.io.ObjectInputStream;importjava.io.ObjectOutputStream;importjava.util.HashMap;importjava.util.Map;importbhz.entity.Simple;public classOriginalSerializable {public static void main(String[] args) throwsIOException, ClassNotFoundException {long start =System.currentTimeMillis();

setSerializableObject();

System.out.println("java原生序列化時間:" + (System.currentTimeMillis() - start) + " ms" );start=System.currentTimeMillis();

getSerializableObject();

System.out.println("java原生反序列化時間:" + (System.currentTimeMillis() - start) + " ms");}public static void setSerializableObject() throwsIOException{

FileOutputStream fo= new FileOutputStream("D:/file2.bin");

ObjectOutputStream so= newObjectOutputStream(fo);for (int i = 0; i < 100000; i++) {

Map map = new HashMap(2);

map.put("zhang0", i);

map.put("zhang1", i);

so.writeObject(new Simple("zhang"+i,(i+1),map));

}

so.flush();

so.close();

}public static voidgetSerializableObject(){

FileInputStream fi;try{

fi= new FileInputStream("D:/file2.bin");

ObjectInputStream si= newObjectInputStream(fi);

Simple simple=null;while((simple=(Simple)si.readObject()) != null){//System.out.println(simple.getAge() + " " + simple.getName());

}

fi.close();

si.close();

}catch(FileNotFoundException e) {

e.printStackTrace();

}catch(IOException e) {//e.printStackTrace();

} catch(ClassNotFoundException e) {

e.printStackTrace();

}

}

}

3、kyro序列化 KyroSerializable.java

packagebhz.test;importjava.io.FileInputStream;importjava.io.FileNotFoundException;importjava.io.FileOutputStream;importjava.io.IOException;importjava.util.HashMap;importjava.util.Map;importorg.objenesis.strategy.StdInstantiatorStrategy;importbhz.entity.Simple;importcom.esotericsoftware.kryo.Kryo;importcom.esotericsoftware.kryo.KryoException;importcom.esotericsoftware.kryo.io.Input;importcom.esotericsoftware.kryo.io.Output;public classKyroSerializable {public static void main(String[] args) throwsIOException {long start =System.currentTimeMillis();

setSerializableObject();

System.out.println("Kryo 序列化時間:" + (System.currentTimeMillis() - start) + " ms");

start=System.currentTimeMillis();

getSerializableObject();

System.out.println("Kryo 反序列化時間:" + (System.currentTimeMillis() - start) + " ms");

}public static void setSerializableObject() throwsFileNotFoundException{

Kryo kryo= newKryo();

kryo.setReferences(false);

kryo.setRegistrationRequired(false);

kryo.setInstantiatorStrategy(newStdInstantiatorStrategy());

kryo.register(Simple.class);

Output output= new Output(new FileOutputStream("D:/file1.bin"));for (int i = 0; i < 100000; i++) {

Map map = new HashMap(2);

map.put("zhang0", i);

map.put("zhang1", i);

kryo.writeObject(output,new Simple("zhang"+i,(i+1),map));

}

output.flush();

output.close();

}public static voidgetSerializableObject(){

Kryo kryo= newKryo();

kryo.setReferences(false);

kryo.setRegistrationRequired(false);

kryo.setInstantiatorStrategy(newStdInstantiatorStrategy());

Input input;try{

input= new Input(new FileInputStream("D:/file1.bin"));

Simple simple=null;while((simple=kryo.readObject(input, Simple.class)) != null){//System.out.println(simple.getAge() + " " + simple.getName() + " " + simple.getMap().toString());

}

input.close();

}catch(FileNotFoundException e) {

e.printStackTrace();

}catch(KryoException e){

}

}

}

4、測試結果對比

java原生序列化時間:8281 ms java原生反序列化時間:5899 ms

Kryo 序列化時間:630 ms Kryo 反序列化時間:15 ms

經過對比,可以發(fā)現(xiàn)kryo是java原生序列化性能十幾倍

總結

以上是生活随笔為你收集整理的avro和java原生序列化的区别,java原生序列化和Kryo序列化性能比较的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。