JavaWeb - 一篇带你序列化 & 反序列化之性能对比分析(二)

简介: JavaWeb - 一篇带你序列化 & 反序列化之性能对比分析(二)

二、JSON 序列化

User user = new User();
user.setUserId(10001);
user.setUserName("序列化first");
user.setUserBirth(new Date());
byte[] bytes = null;
long start = System.currentTimeMillis();
// 序列化
ObjectMapper objectMapper = new ObjectMapper();
for (int i = 0 ; i< 10000 ;i++){
   bytes = objectMapper.writeValueAsBytes(user);
}
long end = System.currentTimeMillis();
System.out.println("消耗时间:"+ (end - start) +"ms" );
System.out.println(bytes.length);
// 反序列化
User user1 = objectMapper.readValue(bytes, User.class);
System.out.println(user1);

三、Gson 序列化

User user = new User();
user.setUserId(10001);
user.setUserName("序列化first");
user.setUserBirth(new Date());
long start = System.currentTimeMillis();
String text = "";
Gson gson = new Gson();
// 序列化
for (int i = 0 ; i< 10000 ;i++){
    text = gson.toJson(user);
}
long end = System.currentTimeMillis();
System.out.println("消耗时间:"+ (end - start) +"ms" );
System.out.println(text.getBytes().length);
// 反序列化
User user1 = gson.fromJson(text, User.class);
System.out.println(user1);

四、Fastjson 序列化

User user = new User();
user.setUserId(10001);
user.setUserName("序列化first");
user.setUserBirth(new Date());
byte[] bytes = null;
long start = System.currentTimeMillis();
// 序列化
String text = null;
for (int i = 0 ; i< 10000 ;i++){
    text = JSON.toJSONString(user);
}
long end = System.currentTimeMillis();
System.out.println("消耗时间:"+ (end - start) +"ms" );
System.out.println(text.getBytes().length);
// 反序列化
User user1 = JSON.parseObject(text, User.class);
System.out.println(user1);  

五、百度 ProtoBuff 序列化

注意:使用这个的时候 user 实体类需要加上 @Protobuff

User user = new User();
user.setUserId(10001);
user.setUserName("序列化first");
user.setUserBirth(new Date());
long start = System.currentTimeMillis();
byte[] encode = null;
Gson gson = new Gson();
Codec<User> userCodec = ProtobufProxy.create(User.class);
// 序列化
for (int i = 0 ; i< 10000 ;i++){
    encode = userCodec.encode(user);
}
long end = System.currentTimeMillis();
System.out.println("消耗时间:"+ (end - start) +"ms" );
System.out.println(encode.length);
// 反序列化
User decode = userCodec.decode(encode);
System.out.println(decode);

六、Kryo 序列化

注意:  原来的旧版本不需要,但是新版本 需要加上 这行进行注册,  kryo.register(User.class, new JavaSerializer());

不然会有报错信息

java.lang.IllegalArgumentException: Class is not registered: org.example.nativenal.domian.User

Note: To register this class use: kryo.register(org.example.nativenal.domian.User.class);

User user = new User();
user.setUserId(10001);
user.setUserName("序列化first");
// user.setUserBirth(new Date());
long start = System.currentTimeMillis();
Kryo kryo = new Kryo();
kryo.register(User.class, new JavaSerializer());
Output output = null;
output = new Output(new FileOutputStream("kryo"));
kryo.writeObject(output, user);
long end = System.currentTimeMillis();
System.out.println("消耗时间:"+ (end - start) +"ms" );
System.out.println(new File("kryo").length());
// 反序列化
Input Input = new Input(new FileInputStream("kryo"));
User user1 = kryo.readObject(Input, User.class);
System.out.println(user1);

在网络传输中文件越小传输的速度越快。

总结

image.png

目录
相关文章
|
2月前
|
存储 Java
【编程基础知识】 分析学生成绩:用Java二维数组存储与输出
本文介绍如何使用Java二维数组存储和处理多个学生的各科成绩,包括成绩的输入、存储及格式化输出,适合初学者实践Java基础知识。
89 1
|
18天前
|
监控 算法 Java
jvm-48-java 变更导致压测应用性能下降,如何分析定位原因?
【11月更文挑战第17天】当JVM相关变更导致压测应用性能下降时,可通过检查变更内容(如JVM参数、Java版本、代码变更)、收集性能监控数据(使用JVM监控工具、应用性能监控工具、系统资源监控)、分析垃圾回收情况(GC日志分析、内存泄漏检查)、分析线程和锁(线程状态分析、锁竞争分析)及分析代码执行路径(使用代码性能分析工具、代码审查)等步骤来定位和解决问题。
|
1月前
|
JSON 数据格式 索引
Python中序列化/反序列化JSON格式的数据
【11月更文挑战第4天】本文介绍了 Python 中使用 `json` 模块进行序列化和反序列化的操作。序列化是指将 Python 对象(如字典、列表)转换为 JSON 字符串,主要使用 `json.dumps` 方法。示例包括基本的字典和列表序列化,以及自定义类的序列化。反序列化则是将 JSON 字符串转换回 Python 对象,使用 `json.loads` 方法。文中还提供了具体的代码示例,展示了如何处理不同类型的 Python 对象。
|
1月前
|
存储 Java 关系型数据库
在Java开发中,数据库连接是应用与数据交互的关键环节。本文通过案例分析,深入探讨Java连接池的原理与最佳实践
在Java开发中,数据库连接是应用与数据交互的关键环节。本文通过案例分析,深入探讨Java连接池的原理与最佳实践,包括连接创建、分配、复用和释放等操作,并通过电商应用实例展示了如何选择合适的连接池库(如HikariCP)和配置参数,实现高效、稳定的数据库连接管理。
61 2
|
1月前
|
存储 安全 Java
Java编程中的对象序列化与反序列化
【10月更文挑战第22天】在Java的世界里,对象序列化和反序列化是数据持久化和网络传输的关键技术。本文将带你了解如何在Java中实现对象的序列化与反序列化,并探讨其背后的原理。通过实际代码示例,我们将一步步展示如何将复杂数据结构转换为字节流,以及如何将这些字节流还原为Java对象。文章还将讨论在使用序列化时应注意的安全性问题,以确保你的应用程序既高效又安全。
|
1月前
|
Java 关系型数据库 数据库
面向对象设计原则在Java中的实现与案例分析
【10月更文挑战第25天】本文通过Java语言的具体实现和案例分析,详细介绍了面向对象设计的五大核心原则:单一职责原则、开闭原则、里氏替换原则、接口隔离原则和依赖倒置原则。这些原则帮助开发者构建更加灵活、可维护和可扩展的系统,不仅适用于Java,也适用于其他面向对象编程语言。
33 2
|
2月前
|
Java
让星星⭐月亮告诉你,Java synchronized(*.class) synchronized 方法 synchronized(this)分析
本文通过Java代码示例,介绍了`synchronized`关键字在类和实例方法上的使用。总结了三种情况:1) 类级别的锁,多个实例对象在同一时刻只能有一个获取锁;2) 实例方法级别的锁,多个实例对象可以同时执行;3) 同一实例对象的多个线程,同一时刻只能有一个线程执行同步方法。
22 1
|
2月前
|
存储 Java
Java编程中的对象序列化与反序列化
【10月更文挑战第9天】在Java的世界里,对象序列化是连接数据持久化与网络通信的桥梁。本文将深入探讨Java对象序列化的机制、实践方法及反序列化过程,通过代码示例揭示其背后的原理。从基础概念到高级应用,我们将一步步揭开序列化技术的神秘面纱,让读者能够掌握这一强大工具,以应对数据存储和传输的挑战。
|
1月前
|
存储 缓存 NoSQL
一篇搞懂!Java对象序列化与反序列化的底层逻辑
本文介绍了Java中的序列化与反序列化,包括基本概念、应用场景、实现方式及注意事项。序列化是将对象转换为字节流,便于存储和传输;反序列化则是将字节流还原为对象。文中详细讲解了实现序列化的步骤,以及常见的反序列化失败原因和最佳实践。通过实例和代码示例,帮助读者更好地理解和应用这一重要技术。
38 0
|
2月前
|
存储 Java 编译器
[Java]基本数据类型与引用类型赋值的底层分析
本文详细分析了Java中不同类型引用的存储方式,包括int、Integer、int[]、Integer[]等,并探讨了byte与其他类型间的转换及String的相关特性。文章通过多个示例解释了引用和对象的存储位置,以及字符串常量池的使用。此外,还对比了String和StringBuilder的性能差异,帮助读者深入理解Java内存管理机制。
25 0