15.8 Java9改进的对象序列化 15.8.1 序列化的含义和意义

15.8 Java9改进的对象序列化

保存对象或者传输对象

对象序列化的目标是将对象保存到磁盘中,或允许在网络中直接传输对象
对象序列化机制允许把内存中的Java对象转换成平台无关的二进制流,从而允许把这种二进制流持久地保存在磁盘上,通过网络将这种二进制流传输到另一个网络节点。其他程序一旦获得了这种二进制流(无论是从磁盘中获取的,还是通过网络获取的),都可以将这种二进制流恢复成原来的Java对象。

15.8.1 序列化的含义和意义

对象可以脱离程序的运行而独立存在

序列化机制允许将实现序列化的**Java对象** 转换成 字节序列,这些字节序列可以保存在磁盘上,或通过网络传输,以备以后重新恢复成原来的对象,序列化机制使得对象可以脱离程序的运行而独立存在

  • 对象的序列化(Serialize)指将一个Java对象写入IO流中,
  • 对象的反序列化(Deserialize)则指从IO流中恢复该Java对象.

Java9可以过滤读入的序列化数据

Java9增强了对象序列化机制,它允许对读入的序列化数据进行过滤,这种过滤可在反序列化之前对数据执行校验,从而提高安全性和健壮性。

可序列化的类

如果需要让某个对象支持序列化机制,则必须让它的类是可序列化的(serializable)。为了让某个类是可序列化的,该类必须实现如下两个接口之一

  • Serializable
  • Externalizable

无须实现Serializable接口方法

Java的很多类已经实现了Serializable,该接口是一个标记接口,实现该接口无须实现任何方法,它只是表明该类的实例是可序列化的。

可序列化的类才可以保存到磁盘中 才可以在网络上传输

所有可能在网络上传输的对象的类都应该是可序列化的,否则程序将会出现异常,比如RMI(Remote method Invoke,即远程方法调用,是Java EE的基础)过程中的参数和返回值;
所有需要保存到磁盘里的对象的类都必须可序列化,比如Web应用中需要保存到HttpSessionServletContext属性的Java对象。

建议每个JavaBean类都实现Serializable

因为序列化是RMI过程的参数和返回值都必须实现的机制,而RMI又是Java EE技术的基础所有的分布式应用常常需要跨平台、跨网络,所以要求所有传递的参数、返回值必须实现序列化。因此序列化机制是Java EE平台的基础。通常建议:程序创建的每个JavaBean类都实现Serializable