java序列化是指java对象转化为一串二进制表示的字节数组, 通过保存和转移这些字节数据来达到持久化的目的.需要持久化的对象, 要继承java.io.Serializable接口.
反序列化 则是相反的过程. 将字节数组重新构造为对象的过程.
序列化不能像class那样保存对象的全部信息.
虽然Java的序列化能够保证对象状态持久保存,但是遇到一些对象结构复杂的情况还是比较难处李的, 下面对一些复杂的对象情况进行总结:
- 当父类继承Serializable接口时, 子类全都能被序列化
- 当子类实现Serializable接口时, 父类没有, 父类的属性不会被序列化(不报错, 数据丢失), 但是子类的属性仍然能够被正确序列化
- 如果序列化的是对象, 那么这个对象必须实现Serializable接口, 否则会报错
- 在反序列化时, 如果对象的属性有修改或删除, 则修改的信息会丢失, 不报错
- 在反序列化时, 如果SerializableId被修改, 反序列化会失败