一、Serializable 和 transient 关键字介绍
1、目标:将对象保存到磁盘或者在网络中传递;
2、通过对象系列化,可以将对象保存在磁盘或网络中;
3、为了实现对象系列化,对应的类必须实现 Serializable
接口;
4、通过java.io.ObjectOutputStream
的writeObject()
方法可以将对象输出到磁盘文件、网络等设备;
5、通过java.io.ObjectInputStream
的readObject()
方法可以从磁盘文件中读出保存的对象;
6、通过在属性前面加上transient
关键字,限制属性写入到文件或网络中;
一、编程实战
代码的详细解读,可以参考视频教程
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进行比较,如果是不一样的,那么反序列化会失败;