回顾一下Java中的序列化

Posted 早起的年轻人

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了回顾一下Java中的序列化相关的知识,希望对你有一定的参考价值。

1 什么是序列化?什么是反序列化?

  • 序列化 是 将数据结构或对象转换成二进制字节流的过程
  • 反序列化是将在序列化过程中所生成的二进制字节流的过程转换成数据结构或者对象的过程

2 实际开发中有哪些用到序列化和反序列化的场景?

  • 将对象存储到文件中的时候需要进行序列化,将对象从文件中读取出来需要进行反序列化。

  • 对象在进行网络传输(比如远程方法调用 RPC 的时候)之前需要先被序列化,接收到序列化的对象之后需要再进行反序列化;

  • 将对象存储到缓存数据库(如 Redis)时需要用到序列化,将对象从缓存数据库中读取出来需要反序列化。

3 常见序列化协议对比

3.1 DK 自带的序列化方式

JDK 自带的序列化,只需实现 java.io.Serializable接口即可。

public class TestBean implements Serializable 
    private static final long serialVersionUID = 1905122041950251207L;
    private String userName;
    private String password;

3.2 Kryo

Kryo 是一个高性能的序列化/反序列化工具,由于其变长存储特性并使用了字节码生成机制,拥有较高的运行速度和较小的字节码体积。

另外,Kryo 已经是一种非常成熟的序列化实现了,已经在 Twitter、Groupon、Yahoo 以及多个著名开源项目(如 Hive、Storm)中广泛的使用。

3.3 Protobuf

Protobuf 出自于 Google,性能还比较优秀,也支持多种语言,同时还是跨平台的。就是在使用中过于繁琐,因为你需要自己定义 IDL 文件和生成对应的序列化代码。这样虽然不灵活,但是,另一方面导致 protobuf 没有序列化漏洞的风险。


完毕

以上是关于回顾一下Java中的序列化的主要内容,如果未能解决你的问题,请参考以下文章

Java回顾一下Java中的synchronized

JAVA中的对象

回顾一下Java注解

Java知识回顾 (13) 序列化

Java JSON 反序列化之殇(看雪2017安全开发者峰会演讲回顾11)

json 字符串中一个 value 多种类型的反序列化