1.概念
Java序列化就是指把Java对象转换为字节序列的过程。将java对象以一连串的字节保存在磁盘文件中的过程,也可以说是保存java对象状态的过程。序列化可以将数据永久保存在磁盘上(通常保存在文件中)。
Java反序列化就是指把字节序列恢复为Java对象的过程。将保存在磁盘文件中的java字节码重新转换成java对象称为反序列化。
2.具体实现
(1)编写Cat.java类,并实现了serializable接口(必须的)
import java.io.Serializable;
public class Cat implements Serializable {
private String name;
private Integer age;
private String type;
public String getName(String romcat) {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge(int i) {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getType(String test) {
return type;
}
public void setType(String type) {
this.type = type;
}
@Override
public String toString() {
return "Cat{" +
"name='" + name + '\'' +
", age=" + age +
", type='" + type + '\'' +
'}';
}
}
(2)序列化
import java.io.*;
//java中专门提供对象流 进行对象的读写操作
//内存和硬盘之间可以传输的只有字节和字符串
public class Test {
public static void main(String[] args) {
File file = new File("d:\\test\\cat.txt");
ObjectOutputStream oos = null;
Cat cat = new Cat();
cat.setType("加菲猫");
cat.setName("tomcat");
cat.getAge(3);
try {
oos = new ObjectOutputStream(new FileOutputStream(file));
oos.writeObject(cat);
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
oos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
(3)反序列化
虚拟机是否允许反序列化,不仅取决于类路径和功能代码是否一致,一个非常重要的一点是两个类的序列化 ID 是否一致(就是 private static final long serialVersionUID = 1L)
import java.io.*;
//java中专门提供对象流 进行对象的读写操作
//内存和硬盘之间可以传输的只有字节和字符串
public class Test {
public static void main(String[] args) {
File file = new File("d:\\test\\cat.txt");
ObjectInputStream ois = null;
Cat cat = new Cat();
try {
ois = new ObjectInputStream(new FileIutputStream(file));
Object o=oos.readObject();
System.out.println(o.toString());
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
ois.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
(4)transient关键字
transient修饰的成员变量不会被序列化。
注意static修饰的静态变量天然就是不可序列化的。