Serializable 和 transient 关键字
-
目标:将对象保存到磁盘或者在网络中传递
-
通过对象系列化,可以将对象保存在磁盘或网络中
-
为了实现对象系列化,对应的类必须实现
Serializable
接口 -
通过
java.io.ObjectOutputStream
的writeObject()
方法可以将对象输出到磁盘文件、网络等设备 -
通过
java.io.ObjectInputStream
的readObject()
方法可以从磁盘文件中读出保存的对象 -
通过在属性前面加上
transient
关键字,限制属性写入到文件或网络中
一、代码实战
代码的详细解读,可以参考视频教程
package com.qicong.gj.c19;
import java.io.Serializable;
/**
* User: 祁大聪
*/
public class Person implements Serializable {
public int age;
public transient String name;
public Person(){}
public Person(String name, int age){
this.name = name;
this.age = age;
}
}
public static void save(){
try{
ObjectOutputStream outputStream = new ObjectOutputStream(new FileOutputStream("persion.txt"));
outputStream.writeObject(new Persion("qicong","18"));
outputStream.close();
}catch (Exception e){
e.printStackTrace();
}finally {
}
}
public static void read(){
try {
ObjectInputStream input = new ObjectInputStream(new FileInputStream("persion.txt"));
Persion persion = (Persion)input.readObject();
System.out.println(persion.name+" "+persion.age);
}catch (Exception e){
e.printStackTrace();
}finally {
}
}
二、serialVersionUID
实现 Serializable 接口后,一般要自己加上 serialVersionUID,表明是这个类的序列号和反序列化的唯一标记。
一般开发工具可以帮你自动生成。
在序列化的时候,会将这个 UID 存储到文件中;反序列化的时候,会用文件中的UID和类中的UID进行比较,如果是不一样的,那么反序列化会失败。