在上周使用 Mybatis-Plus 做项目时无意发现,对于储存信息的实体类上面自动实现了 Serializable 接口,这不禁让我回忆到刚开始学 Java 时,对于 Serializable 接口的作用只停留在进行序列化的理解上,当初的理解认为对于序列化这个解释,就是把实体类信息进行封装存储到数据库中或者将实体类信息进行磁盘上的存储。但是疑问点来了,既然 Serializable 接口是为了将实体类信息进行存储,那为什么我们平时写的实体类在存储到数据库时没有实现接口却仍然可以进行数据的存储

虽然网上答案众多,但是让我能够真正明白的还是这篇文章:
谈谈实现Serializable接口的作用和必要性

序列化作用:

  • 提供一种简单又可扩展的对象保存恢复机制。
  • 对于远程调用,能方便对对象进行编码和解码,就像实现对象直接传输。
  • 可以将对象持久化到介质中,就像实现对象直接存储
  • 允许对象自定义外部存储的格式。

综合上面所述,序列化的作用是为了更好的保存和传输数据,也就是在进行数据的保存和传输时可以提供一个更佳可靠的方案来保证数据的安全性,虽然我们平时定义的实体类里面没有实现 Serializable 接口也并不影响我们进行数据信息的传输和保存。但是对于实现的实体类来说有了更加可靠的数据传输保护。那这具体是什么意思呢?
对于基本类型,我们在使用数据库时,都有一个与之相对应的数据类型进行匹配如:

Java             数据库
int       ->     int
String    ->     varchar
Long      ->     bigint
....             ....

所以在使用时一般不必注意实体类的序列化,但是当使用的是 NoSql 类型的数据库时,这种类型的数据库中根本没有与之相对应的数据结构来进行匹配,因此就需要使用序列化来进行数据的安全传输和存储。而对于更加复杂的操作中,如果不进行序列化的实现,往往是会出现一些错误的。

Serializable类型的参数
关于 Serializable 接口还要提到的一点是,有时候我们会看见在方法的参数里面接收着 Serializable 类型的参数,而Java 中的包装类几乎都实现了这个接口,因此方法里面可以传Integer、String、实现了Serializable接口的类等等,我觉有点类似于泛型的感觉了。

如果文章对小伙伴有帮助,不妨点个攒👍,谢谢啦~⭐

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐