技术文章

Java对象为啥要实现Serializable接口?

要知道实现这个接口的原因,首先得需要了解这个接口的目的!

Serializable 接口的作用

我们先来看一下,Java API 文档对这个接口的解释:

实现了 java.io.Serializable 接口的类就表示是可序列化的,未实现此接口的类将不会将其任何状态序列化或反序列化。此接口没有方法或字段,仅用于标识可序列化的语义。

所以,这个问题就变成了,Java 对象为什么要序列化?我觉得有以下两个原因:

- 对象持久化:典型的比如 HTTP Session 对象,默认在内存中,重启后就会话就没了,为了保持会话,可以把它序列化到文件或者数据库

- 分布式对象:比如 RMI(Remote Method Invocation, 虽然已经用的不多了),调用远程主机上的服务时,可以直接使用对象作为参数,方法就像在本地使用一样

Serializable接口

序列化和反序列化的内容是什么

序列化,就是通过 ObjectOutputStream 将对象的一部分字段值,甚至是集合字段的内容写入到一个文件中。

反序列化,就是使用 ObjectInputStream 按照之前写入的方式,从二进制文件中,读取内容,生成一个对应类的实例对象。