Java シリアルツール性能比較
本ページでは主にjavaのシリアルツールの性能比較を記載します。
コードと結果の部分があります。
###使用されたのdependency
- Java原生方法
- XStream方式
- FastJson方式
- Hessian方式
シリアルされたデータ
@Data
public class User implements Serializable {
private static final long serialVersionUID = -2564324657866843L;
private String name;
private int age;
private void writeObject(java.io.ObjectOutputStream s) throws IOException {
s.defaultWriteObject();
s.writeObject(name);
}
private void readObject(java.io.ObjectInputStream s) throws IOException, ClassNotFoundException {
s.defaultReadObject();
name=(String)s.readObject();
}
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
Userのデータをシリアル化されたデータのレングスに基づいて、ツール間の効率を検証します。
効率検証
1・ まずJava原生登場
ByteArrayOutputStream byteArrayOutputStream=
new ByteArrayOutputStream();
try {
ObjectOutputStream outputStream=
new ObjectOutputStream(byteArrayOutputStream);
outputStream.writeObject(obj);
return byteArrayOutputStream.toByteArray();
} catch (IOException e) {
e.printStackTrace();
}
return new byte[0];
データのレングスはどのぐらいですか?
byte.length:92
2・ 次はXStreamですXMLにベースのツールです
XStream xStream=new XStream(new DomDriver());
@Override
public <T> byte[] serialize(T obj) {
return xStream.toXML(obj).getBytes();
}
データのレングスはどのぐらいですか?
byte.length:221 やはりXMLですね~
3・ そしてFastJson登場、中国企業Alibaba 開発されたのツールです。
return JSON.toJSONString(obj).getBytes();
書き方は安いですか?
でデータのレングスはどのぐらいですか?
byte.length:23 すごいのシリアルですね
4・ 最後にはHessianです
ByteArrayOutputStream outputStream=new ByteArrayOutputStream();
HessianOutput hessianOutput=new HessianOutput(outputStream);
try {
hessianOutput.writeObject(obj);
return outputStream.toByteArray();
} catch (IOException e) {
e.printStackTrace();
}
結果は以下です↓
byte.length:50
まとめ
比較してみると,fastjsonは最も効率的なツールです。でも他のツールが悪いわけではない。fastjsonは複数言語に対応できないので。皆さんは項目の内容に応じてシリアルツール使うしよう!