Java序列化与反序列化

Java序列化(建立可复用的Java对象)java

保持(持久化)对象及其状态到内存或磁盘数组

  Java平台容许咱们在内存中建立可复用的Java对象,但通常状况下,只有当JVM处于运行时,这些对象才可能存在,即这些对象的生命周期不会比JVM的生命周期更长。但在现实应用中,就可能要求在JVM中止运行以后可以保存(持久化)指定的对象,并在未来从新读取被保存的对象。Java对象序列化就可以帮助咱们实现该功能。安全

序列化对象以字节数组保持--静态成员不保存服务器

  使用Java对象序列化,在保存对象时,会把其状态保存为一组字节,在将来,再将这些字节组装成对象。必须注意的是,对象序列化保存的是对象的“状态”,即它的成员变量。由此可知,对象序列化不会关注类中的静态变量。网络

序列化用户远程对象传输加密

  除了在持久化对象时会用到对象序列化以外,当使用RMI(远程方法调用),或在网络中传递对象时,都会用到对象序列化。Java序列化API为处理对象序列化提供了一个标准机制,该API简单易用。spa

Serializable实现序列化对象

  在Java中,只要一个类实现了java.io.Serializable接口,那么它就能够被序列化。
接口

ObjectOutputStream和ObjectInputStream对对象进行序列化及反序列化生命周期

writeObject和readObject自定义序列化策略

  在类中增长writeIbject和readObject方法能够实现自定义序列化策略。

序列化ID

  虚拟机是否容许反序列化,不只取决于类路径和功能代码是否一致,一个很是重要的一点是两个类的序列化ID是否一致(就是private static final long serialVersionUID)。

序列化不保存静态变量

序列化子父类说明

  要想将父类对象也序列化,就须要让父类也实现Serializable接口。

Transient关键字阻止该变量被序列化到文件中

  1.在变量声明前加上Transient关键字,能够阻止该变量被序列化到文件中,在被反序列化后,transient变量的值被设为初始值,如int型的是0,对象型的是null。

  2.服务器端给客户端发送序列化对象数据,对象中有一些数据是敏感的,好比密码字符串等,但愿对该密码字段在序列化时,进行加密,而客户端若是拥有解密的密钥,只有在客户端进行反序列化时,才能够对密码进行读取,这样能够必定程度保证序列化对象的数据安全。

相关文章
相关标签/搜索