1. 序列化
序列化一般是指把结构化的对象变成无结构的字节流,便于存储、传输
字节流,同义:二进制流、二进制数组、字节数组
Java 序列化是指把 Java 对象转换为字节序列的过程;而 Java 反序列化是指把字节序列恢复为Java 对象的过程
作用:
1.对象持久化:对象生存在内存中,把一个对象持久化到磁盘
2.远程网络通信:内存中的对象不能直接进行网络传输,发送端把对象序列化成网络可传输的字节流,接收端再把字节流还原成对象
2. Serializable 接口
- Serializable接口是一个标记接口,不用实现任何方法。一旦实现了此接口,该类的对象就是可序列化的
- 若类的成员属性是引用类型,则这个引用类型也必须是可序列化的,否则会导致此类不能序列化
- transient 修饰的属性不能序列化
- 静态成员不能序列化
2.1 可选的自定义序列化(transient )
- transient(瞬时的)表示该属性不需要序列化
ArrayList 的 transient 可以拿到
public class ArrayList<E> extends AbstractList<E>
implements List<E>, RandomAccess, Cloneable, java.io.Serializable {
transient Object[] elementData;
rivate void readObject(java.io.ObjectInputStream s)
throws java.io.IOException, ClassNotFoundException {
}
private void writeObject(java.io.ObjectOutputStream s) throws java.io.IOException {
s.defaultWriteObject();
for (int i=0; i<size; i++) {
s.writeObject(elementData[i]);
}
}
}
3. 序列化方式
- 实现 Serializable 接口
- Hessian 序列化
- JSON 序列化
- 轻量级数据交换格式
- 将数据对象转换为 JSON 字符串
- 序列化过程中抛弃了类型信息,所以反序列化时只有提供类型信息才能准确地反序列化
网友评论