1、基本概念
把对象转换为字节序列的过程称为对象的序列化
把字节序列恢复为对象的过程称为对象的反序列化。
2、实现方式:
两种方式:其一,实现Serializable接口;其二,实现Externalizable接口
只有实现了Serializable和Externalizable接口的类的对象才能被序列化。Externalizable接口继承自 Serializable接口,实现Externalizable接口的类完全由自身来控制序列化的行为,而仅实现Serializable接口的类可以 采用默认的序列化方式
基于Serializable接口是通过操作ObjectOutputStream类和ObjectInputStream类实现的
基于Externalizable接口是通过操作ObejectOutput类和ObjectInput类实现的
3、主要用途:
对象的序列化主要有两种用途:
1) 把对象的字节序列永久地保存到硬盘上,通常存放在一个文件中;
2) 在网络上传送对象的字节序列。
对象序列化的本质是将对象的状态通过有序字节流进行保存或传输,由此,静态变量是类变量,属于整个类,并非专属于每个对象实例,因此,不序列化静态变量。瞬时变量,指的是被transient关键字修饰的变量,该关键字表示为瞬时的,即不做持久化处理的,以此来控制属性是否被包含进入序列化的字节流中。因此,在序列化时,排除transient关键字修饰的属性
/**
* MethodName: SerializeCustomer
* Description: 序列化Customer对象
* @author pcchen
* @throws FileNotFoundException
* @throws IOException
*/
private static void SerializeCustomer() throws FileNotFoundException,
IOException {
Customer customer = new Customer("顾客", 25);
// ObjectOutputStream 对象输出流
ObjectOutputStream oo = new ObjectOutputStream(new FileOutputStream(
new File("E:/Customer.txt")));
oo.writeObject(customer);
System.out.println("Customer对象序列化成功!");
oo.close();
}
/**
* MethodName: DeserializeCustomer Description: 反序列Customer对象
*
* @author pcchen
* @return
* @throws Exception
* @throws IOException
*/
private static Customer DeserializeCustomer() throws Exception, IOException {
ObjectInputStream ois = new ObjectInputStream(new FileInputStream(
new File("F:/Customer.txt")));
Customer customer = (Customer) ois.readObject();
System.out.println("Customer对象反序列化成功!");
return customer;
}
4、serialVersionUID的作用
serialVersionUID: 字面意思上是序列化的版本号,凡是实现Serializable接口的类都有一个表示序列化版本标识符的静态变量
serialVersionUID有两种生成方式:
1、采用这种方式生成的serialVersionUID是1L
2、采用这种方式生成的serialVersionUID是根据类名,接口名,方法和属性等来生成的
private static final long serialVersionUID = 4603642343377807741L;
在bean(Custom类)例子中,没有指定Customer类的serialVersionUID的,那么java编译器会自动给这个class进行一个摘要算法,类似于指纹算法,只要这个文件 多一个空格,得到的UID就会截然不同的,所以反序列化,如果自己指定serialVersionUID,则修改了Custom中的变量的信息都是争取的,如果没有自己指定serialVersionUID,那么修改属性后,反序列化,就会报错。
Exception in thread "main" java.io.InvalidClassException