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
应用中需要保存到HttpSession
或ServletContext
属性的Java
对象。
建议每个JavaBean类都实现Serializable
因为序列化是RMI
过程的参数和返回值都必须实现的机制,而RMI
又是Java EE
技术的基础所有的分布式应用常常需要跨平台、跨网络,所以要求所有传递的参数、返回值必须实现序列化。因此序列化机制是Java EE
平台的基础。通常建议:程序创建的每个JavaBean
类都实现Serializable