Java类实现serializable
1.Java序列化与反序列化
- Java序列化是指把Java对象转换为字节序列的过程
- Java反序列化是指把字节序列恢复为Java对象的过程。
2.为什么需要序列化与反序列化
当两个进程进行远程通信时,可以相互发送各种类型的数据,包括文本、图片、音频、视频等, 而这些数据都会以二进制序列的形式在网络上传送。那么当两个Java进程进行通信时,能否实现进程间的对象传送呢?答案是可以的。如何做到呢?这就需要Java序列化与反序列化了。换句话说,一方面,发送方需要把这个Java对象转换为字节序列,然后在网络上传送;另一方面,接收方需要从字节序列中恢复出Java对象。
好处:
- 一是实现了数据的持久化,通过序列化可以把数据永久地保存到硬盘上(通常存放在文件里)
- 二是利用序列化实现远程通信,即在网络上传送对象的字节序列。
3.为什么要进行序列化?
实现序列化的两个原因:
- 1、将对象的状态保存在存储媒体中以便可以在以后重新创建出完全相同的副本
- 2、按值将对象从一个应用程序域发送至另一个应用程序域。
实现serializabel接口的作用是就是可以把对象存到字节流,然后可以恢复,所以你想如果你的对象没实现序列化怎么才能进行持久化和网络传输呢,要==<对象状态的>持久化和网络传输==就得转为字节流,所以在分布式应用中及设计数据持久化的场景中,你就得实现序列化。
4.每个实体bean都必须实现serializabel接口吗?
是不是每个实体bean都要实现序列化,答案其实还要回归到为什么要进行序列化,那就是你的bean是否需要持久化存储媒体中以及是否需要传输给另一个应用,没有的话就不需要,例如我们利用fastjson将实体类转化成json字符串时,并不涉及到转化为字节流,所以其实跟序列化没有关系。
5.我做一些项目的时候,没有实现序列化,同样没什么影响,到底什么时候应该进行序列化操作呢?
序列化的对象包括基本数据类型,所有集合类以及其他许多东西,还有Class 对象。有的时候并没有实现序列化,依然可以持久化到数据库。这个其实我们可以看看实体类中常用的数据类型,例如Date、String等等,它们已经实现了序列化,而一些基本类型,数据库里面有与之对应的数据结构,从我们的类声明来看,我们没有实现serializabel接口,其实是在声明的各个不同变量的时候,由具体的数据类型帮助我们实现了序列化操作。