1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Java シリアルツール性能比較

Last updated at Posted at 2021-01-22

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は複数言語に対応できないので。皆さんは項目の内容に応じてシリアルツール使うしよう!

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?