序列化是将对象的状态(属性)写入到特定的流中的过程 (输出过程)
对象输出流ObjectOutputStream(在OutputStream的基础上加一个Object对象)
先new它的对象 new FileOutputStream
writeObject(Object)
使用集合保存对象,可以将集合中的所有对象序列化
实现Serializable接口
创建对象输出流
调用writeObject()方法将对象写入文件
关闭对象输出流
反序列化
如何实现学员密码属性避免序列化和反序列化?
transient
反序列化是输入
readObject(Object)
//想对一个类 进行序列化操作 首先实现Serializable接口
public class Student implements Serializable {
private static final long serialVersionUID = 7335214499676390237L;
private String name;
private int age;
private String sex;
transient private String password; //不进行序列化的属性用transient修饰
public Student() {
}
public Student(String name, int age, String sex, String password) {
this.name = name;
this.age = age;
this.sex = sex;
this.password = password;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
", sex='" + sex + '\'' +
", password='" + password + '\'' +
'}';
}
}
public static void main(String[] args) {
//创建对象
Student st = new Student("一半", 22, "女","1222");
//序列化操作:
ObjectOutputStream oos = null;
FileOutputStream fos = null;
//反序列化操作
ObjectInputStream ois = null;
FileInputStream fis = null;
try {
//序列化操作
fos = new FileOutputStream("D:/a/student.txt");
oos = new ObjectOutputStream(fos);
oos.writeObject(st);
//反序列化操作
fis = new FileInputStream("D:/a/student.txt");
ois = new ObjectInputStream(fis);
Object o = ois.readObject();//Object类型 将Object类型转为Student类型
Student sstt = (Student) o;
System.out.println(sstt);
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
} finally {
try {
//序列化关闭
oos.close();
fos.close();
//反序列化关闭
ois.close();
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}