IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> Java序列化框架码流、性能对比 -> 正文阅读

[移动开发]Java序列化框架码流、性能对比

本文对序列化框架:JDK、Kryo、Hession、FST、Fastjson、Gson进行对比,对比维度包括序列化后码流大小、10w次序列化反序列化性能耗时。
1、依赖jar包

		<dependency>
			<groupId>org.projectlombok</groupId>
			<artifactId>lombok</artifactId>
			<version>1.18.8</version>
			<scope>provided</scope>
		</dependency>

		<!-- 序列化框架 -->
		<dependency>
			<groupId>hessian</groupId>
			<artifactId>hessian</artifactId>
			<version>3.0.1</version>
		</dependency>
		<dependency>
			<groupId>io.protostuff</groupId>
			<artifactId>protostuff-core</artifactId>
			<version>1.6.0</version>
		</dependency>
		<dependency>
			<groupId>io.protostuff</groupId>
			<artifactId>protostuff-collectionschema</artifactId>
			<version>1.6.0</version>
		</dependency>
		<dependency>
			<groupId>io.protostuff</groupId>
			<artifactId>protostuff-runtime</artifactId>
			<version>1.6.0</version>
		</dependency>
		<dependency>
			<groupId>io.protostuff</groupId>
			<artifactId>protostuff-api</artifactId>
			<version>1.6.0</version>
		</dependency>
		<dependency>
			<groupId>com.esotericsoftware</groupId>
			<artifactId>kryo</artifactId>
			<version>4.0.0</version>
		</dependency>

		<dependency>
			<groupId>de.ruedigermoeller</groupId>
			<artifactId>fst</artifactId>
			<version>2.57</version>
		</dependency>
		<dependency>
			<groupId>com.google.code.gson</groupId>
			<artifactId>gson</artifactId>
			<version>2.8.5</version>
		</dependency>
		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>fastjson</artifactId>
			<version>1.2.62</version>
		</dependency>

2、测试实体

package com.zhanghao.test.serialize;

import lombok.Getter;
import lombok.Setter;

import java.io.Serializable;

@Getter
@Setter
public class SerializeBO implements Serializable {
    private static final long serialVersionUID = -3109861179106944873L;
    private Integer a = 1;
    private Long b = 2L;
    private Byte c = 3;
    private Short d = 4;
    private Double e = 5.0;
    private Float f = 6.0F;
    private Boolean g  = true;
//    private Character h = 'h';
}

3、测试类

package com.zhanghao.test.serialize;

import com.alibaba.fastjson.JSON;
import com.caucho.hessian.io.HessianInput;
import com.caucho.hessian.io.HessianOutput;
import com.esotericsoftware.kryo.Kryo;
import com.esotericsoftware.kryo.io.Input;
import com.esotericsoftware.kryo.io.Output;
import com.google.gson.Gson;
import org.nustaq.serialization.FSTConfiguration;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.ArrayList;

public class SeralizeTest {

    private static FSTConfiguration configuration = FSTConfiguration.createDefaultConfiguration();

    public static void main(String[] args) throws Exception {
        SerializeBO serializeBO = new SerializeBO();
        System.out.println("JDK:" + countJdkByte(serializeBO) + " Byte");
        System.out.println("Kryo:" + countKryo(serializeBO) + " Byte");
        System.out.println("Hession:" + countHessian(serializeBO) + " Byte");
        System.out.println("FST:" + countFST(serializeBO) + " Byte");
        System.out.println("Fastjson:" + countFastjson(serializeBO) + " Byte");
        System.out.println("Gson:" + countGson(serializeBO) + " Byte");

        long jdkTime = System.currentTimeMillis();
        for (int i=0; i<100000; i++) {
            byte[] bytes = seralizeJdkByte(serializeBO);
            unSeralizeJdkByte(bytes);
        }
        System.out.println("JDK 耗时:" + (System.currentTimeMillis() - jdkTime) + "ms");

        long kyroTime = System.currentTimeMillis();
        for (int i=0; i<100000; i++) {
            byte[] bytes = serializeKryo(serializeBO);
            unSerializeKryo(bytes);
        }
        System.out.println("Kryo 耗时:" + (System.currentTimeMillis() - kyroTime) + "ms");

        long hessionTime = System.currentTimeMillis();
        for (int i=0; i<100000; i++) {
            byte[] bytes = serializeHessian(serializeBO);
            unSerializeHessian(bytes);
        }
        System.out.println("Hessian 耗时:" + (System.currentTimeMillis() - hessionTime) + "ms");

        long fstTime = System.currentTimeMillis();
        for (int i=0; i<100000; i++) {
            byte[] bytes = serializeFST(serializeBO);
            unSerializeFST(bytes);
        }
        System.out.println("FST 耗时:" + (System.currentTimeMillis() - fstTime) + "ms");

        long fastjsonTime = System.currentTimeMillis();
        for (int i=0; i<100000; i++) {
            String str = serializeFastjson(serializeBO);
            unSerializeFastjson(str);
        }
        System.out.println("Fastjson 耗时:" + (System.currentTimeMillis() - fastjsonTime) + "ms");

        long gsonTime = System.currentTimeMillis();
        for (int i=0; i<100000; i++) {
            String str = serializeGson(serializeBO);
            unSerializeGson(str);
        }
        System.out.println("Gson 耗时:" + (System.currentTimeMillis() - gsonTime) + "ms");
    }

    /** JDK */
    private static int countJdkByte(Object obj) throws Exception {
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        ObjectOutputStream os = new ObjectOutputStream(baos);
        os.writeObject(obj);
        int count = baos.toByteArray().length;
        os.close();
        baos.close();
        return count;
    }

    private static byte[] seralizeJdkByte(Object obj) throws Exception {
        byte[] bytes = null;
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        ObjectOutputStream os = new ObjectOutputStream(baos);
        os.writeObject(obj);
        bytes = baos.toByteArray();
        os.close();
        baos.close();
        return bytes;
    }

    private static Object unSeralizeJdkByte(byte[] bytes) throws Exception {
        ObjectInputStream oit = new ObjectInputStream(new ByteArrayInputStream(bytes));
        Object object = oit.readObject();
        oit.close();
        return object;
    }

    /** Kryo */
    private static int countKryo(Object obj) {
        Kryo kryo = new Kryo();
        kryo.setReferences(true);
        Output oOutput = new Output(1, 102400);
        kryo.writeObject(oOutput, obj);
        byte[] buff = oOutput.toBytes();
        oOutput.close();
        return buff.length;
    }

    private static byte[] serializeKryo(Object obj) {
        Kryo kryo = new Kryo();
        kryo.setReferences(true);
        Output oOutput = new Output(1, 102400);
        kryo.writeObject(oOutput, obj);
        oOutput.close();
        return oOutput.toBytes();
    }

    private static Object unSerializeKryo(byte[] bytes) {
        Kryo kryo = new Kryo();
        Input input = new Input(bytes);
        Object obj = kryo.readObject(input, ArrayList.class);
        input.close();
        return obj;
    }

    /** Hessian */
    private static int countHessian(Object obj) throws Exception {
        ByteArrayOutputStream os = new ByteArrayOutputStream();
        HessianOutput ho = new HessianOutput(os);
        ho.writeObject(obj);
        byte[] buffer = os.toByteArray();
        os.close();
        return buffer.length;
    }

    private static byte[] serializeHessian(Object obj) throws Exception {
        ByteArrayOutputStream os = new ByteArrayOutputStream();
        HessianOutput ho = new HessianOutput(os);
        ho.writeObject(obj);
        os.close();
        return os.toByteArray();
    }

    private static Object unSerializeHessian(byte[] bytes) throws Exception {
        ByteArrayInputStream is = new ByteArrayInputStream(bytes);
        HessianInput hi = new HessianInput(is);
        Object obj = hi.readObject();
        is.close();
        return obj;
    }

    /** FST */
    private static int countFST(Object obj) throws Exception {
        return configuration.asByteArray(obj).length;
    }

    private static byte[] serializeFST(Object obj) throws Exception {
        return configuration.asByteArray(obj);
    }

    private static Object unSerializeFST(byte[] bytes) throws Exception {
        return configuration.asObject(bytes);
    }

    /** Fastjson */
    private static int countFastjson(Object obj) {
        String jsonStr = JSON.toJSONString(obj);
        return jsonStr.getBytes().length;
    }

    private static String serializeFastjson(Object obj) {
        return JSON.toJSONString(obj);
    }

    private static Object unSerializeFastjson(String str) {
        return JSON.parseObject(str, Object.class);
    }

    /** Gson */
    private static int countGson(Object obj) throws Exception {
        Gson gson = new Gson();
        return gson.toJson(obj).getBytes().length;
    }

    private static String serializeGson(Object obj) throws Exception {
        Gson gson = new Gson();
        return gson.toJson(obj);
    }

    private static Object unSerializeGson(String json) throws Exception {
        Gson gson = new Gson();
        return gson.fromJson(json, Object.class);
    }

}

4、测试结果

在这里插入图片描述

?如需使用 码流小、性能高的序列化框架,可采用Google出品的Protobuf数据协议?Protobuf序列化_猴子哥哥1024的博客-CSDN博客_protobuf序列化

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2022-05-12 16:33:51  更:2022-05-12 16:34:48 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 2:05:44-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码