序列化与反序列化
序列化:是一种对象持久化的手段:指将对象转换为字节流的过程。
反序列化:是根据字节流恢复对象的过程。
序列化的作用:
- 把对象的字节序列化永久的存放在磁盘上,通常放在一个文件夹下。
- 在网络上传输对象的字节序列。
对象序列化用于将一个对象转换为字节流的过程,可以将对象序列化之后保存在磁盘中或者通过网络发送至另外一个程序,对象序列化可以把对象转换为与平台无关的字节流,在不同平台都可以反序列化为之前的对象。
序列化和反序列化的实现步骤
1、首先,如果一个类要进行序列化的相关操作,那么就必须要实现Serializable
接口,进行标记。表示此类可以被序列化。
2、其次,我们要使用ObjectOutputStream
/ ObjectInputStream
进行序列化和反序列化。
-
ObjectOutputStream
把对象转换成流写入到文件或者网络上。 -
ObjectInputStream
读取文件中的对象,对它及进行恢复。
class B implements Serializable {
private String kind;
public B(String kind) {
this.kind = kind;
}
//省略get/set方法
}
//Serializable 标记接口
class Dog implements Serializable {
private static final long serialVersionUID = -7054078879904171713L;
//默认就是1L
private String name;
private transient int age; //当你不想让某个字段序列化,或者不想让某个字段按照默认方式
//序列化 就是用这个字段
public Dog(String name, int age) {
this.name = name;
this.age = age;
}
//省略get/set方法
//重新定义序列化方式
private void writeObject(ObjectOutputStream out) {
try {
//会对一些没有被transient修饰的字段使用默认方式序列化
out.defaultWriteObject();
//md5
age = age * 9