主要有两个原因:
1、将对象的状态保存在存储媒体中以便可以在以后重新创建出完全相同的副本;
1、将对象的状态保存在存储媒体中以便可以在以后重新创建出完全相同的副本;
这个可以这么理解:
比如,你要将某个特定的对象保存到文件中,然后隔几天在把它拿出来用
2、按值将对象从一个应用程序域发送至另一个应用程序域。
2、按值将对象从一个应用程序域发送至另一个应用程序域。
这个可以这么理解:
在进行Socket编程的时候,需要要传输某一类的对象,那么也就要实现Serializable接口;最常见的你传输一个字符串或者类Date型的数据,它是JDK里面的类,也实现了Serializable接口,所以可以在网络上传输。 或者当你要去调用一个远程对象,如在计算机A中调用另一台计算机B的对象的时,那么你需要通过JNDI服务获取计算机B目标对象的引用,将对象从B传送到A,这个时候就需要实现序列化接口。
是否都要实现Serializable
不一定,主要就是看你的bean是否需要持久化存储媒体中以及是否需要传输给另一个应用,没有的话就不需要,例如我们利用fastjson将实体类转化成json字符串时,并不涉及到转化为字节流,所以其实跟序列化没有关系。
附加问题:
有的时候并没有实现序列化,依然可以持久化到数据库。
这个其实我们可以看看实体类中常用的数据类型,例如Date、String等等,它们已经实现了序列化,而一些基本类型,数据库里面有与之对应的数据结构,从我们的类声明来看,我们没有实现serializabel接口,其实是在声明的各个不同变量的时候,由具体的数据类型帮助我们实现了序列化操作。