JAVA序列化
是什么
java序列化就是将java对象转换为二进制编码的过程。
反序列化就是将二进制编码转换为java对象的过程。
为什么要进行序列化
序列化可以将对象及其状态持久化到内存或者磁盘中
java平台允许我们创建可复用的java对象,但是这些对象的生命周期小于JVM的生命周期,只有当JVM运行时,这些对象才会存在。但是在实际的应用中,我们可能会要在JVM停止工作之后使用这些对象,即需要在JVM结束后保存这些对象。序列化可以满足我们的这一需求。
可以用统一的格式保存文件
各种数据有许多不同的结构,但是序列化之后都变成了字节流,就可以以一种统一的格式进行传输和保存
使用序列化
- 对象序列化保存的是对象的状态,即成员变量。序列化不会关注类中的静态变量。在保存状态时,会将其状态保存成二进制数组。
- 除了在持久化对象时需要使用序列化之外,在进行RMI(远程方法调用),在网络中传输对象时,都要用到对象序列化。
- 对象序列化时进行的是对象的深复制,即复制的是对象本身和引用的对象本身。序列化一个对象就能得到整个对象序列。
序列化的实现
- 在java中,只要一个类实现了java.io.Serializable接口,就可以被序列化
- 使用ObjectOutputStream和ObjectInputStream来进行对象的序列化和反序列化
- 在类中增加writeObject和readObject可以自定义序列化策略
Transient阻止序列化
- 在变量前声明Transient,可以阻止该变量被序列化到文件中去。在反序列化后,transient所修饰的变量被设置成初始值。如int为0,对象为null
- 在一些场景中,对象中有一些数据是敏感的,比如密码等信息,不希望在网络进行操作,这些变量就可以加上transient关键字。