Java的序列化和反序列化是什么?
序列化:把Java对象转换成成字节序列的过程
反序列化:与序列化相对,把字节序列转换成对象的过程
为什么需要序列化和反序列化?
-
对象的持久化
众所周知,java的对象是存放在堆内存中,如果JVM停机,那么堆内存就不复存在了,而对象也随之消失了,为了能在JVM停机的情况下,Java对象能够保留下来,便引入了序列化的概念,将Java对象转换成字节序列,保存在文件中,当需要该对象中,便从对应的文件中取出字节序列然后反序列化为对象。 -
方便网络传输
对于对象、文件、数据有许多格式,难以统一保存和传输,引入了序列化概念,这些格式的数据都转换为字节流了,都变成了一种东西,就可以用通用的方式进行保存和传输,等到使用时通过反序列化进行还原
为什么需要serialVersionUID并指定值?
- serialVersionUID的引入可以理解为对对象进行版本控制(重点在version单词),在进行反序列化时会将serialVersionUID和本地对应实体类的serialVersionUID进行比较,如果不一致,则反序列化不通过。
- 为啥serialVersionUID需要指定值呢?因为如果不指定值,JVM在序列化和反序列化时都会自动生成一个serialVersionUID,这样的话序列化生成的serialVersionUID和反序列化生成serialVersionUID不一致就会反序列化失败!