概念
序列化:把对象转换为字节序列的过程称为对象的序列化。(对象 --> 字节序列)
反序列化:把字节序列恢复为对象的过程。(字节序列 --> 对象)
整个过程都是 Java 虚拟机(JVM)独立的,也就是说,在一个平台上序列化的对象可以在另一个完全不同的平台上反序列化该对象。
序列化对象
条件:1.该类必须实现 java.io.Serializable接口(也称marker或tag类的标记用接口,声明实现它的类可以被序列化,且子类也自动可以序列化)
2.该类的所有属性必须是可序列化的。如果有一个属性不是可序列化的,则该属性必须注明是短暂的。
序列化+存储:对象-->文件(java标准约定给文件一个.ser扩展名),使用ObjectOutputStream类用来序列化一个对象。
反序列化+读取:文件-->对象,ObjectInputStream类用来反序列化。
注:static变量不会被序列化,所有对象共享的同一份静态变量
连接串流(connection stream):用用来表示源或目的地、文件、网络套接字连接。
链接用串流(chain stream):用来链接 连接串流。
拷贝对象
1.使用Object的Cloneable接口
如果使用Clone涉及到浅拷贝与深拷贝
浅拷贝:使用一个已知实例对新创建实例的成员变量逐个赋值。(传递引用,引用共享,不复制实例)(修改一个会影响另一个)
深拷贝:复制对象所有非引用成员变量值,还要为引用类型的成员变量创建新的实例,并且初始化为形式参数实例值。(复制引用,复制实例)
2.使用序列化方式
注:使用该工具类的对象必须要实现Serializable接口,否则是没有办法实现克隆的。