所用类
public class Student implements Serializable {
private static final long serialVersionUID = 1;
private String name;
private String Gender;
private int age;
private transient int password;
public Student() {
}
public Student(String name, String gender, int age, int password) {
this.name = name;
Gender = gender;
this.age = age;
this.password = password;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getGender() {
return Gender;
}
public void setGender(String gender) {
Gender = gender;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public void setPassword(int password) {
this.password = password;
}
public int getPassword() {
return password;
}
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", Gender='" + Gender + '\'' +
", age=" + age +
", password=" + password +
'}';
}
}
序列化流
public class ObjectOutputStreamDemo1 {
public static void main(String[] args) throws Exception {
Student stu = new Student("Leon","Male",19,4321);
/**这个学生类必须是实现了序列化接口的,public class Student implements Serializable
*
* 上面叫字节流,下面叫对象字节流,对象字节流没有缓冲区*/
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("CertExam\\src\\OutTest02.txt"));
oos.writeObject(stu);
oos.close();
}
}
反序列化流
public class ObjectInputStreamDemo2 {
public static void main(String[] args) throws Exception {
FileInputStream is = new FileInputStream("CertExam\\src\\OutTest02.txt");
/**上面叫字节流,下面叫对象字节流,对象字节流没有缓冲区*/
ObjectInputStream ois = new ObjectInputStream(is);
/**因为反序列化时,对象类型不确定,所以用最大的Object,所以要手动类转换*/
Student stu = (Student)ois.readObject();
System.out.println(stu);
/**被transient修饰的成员变量当然变成默认值,private transient int password;
* 类文件里如果定义了版本号,private static final long serialVersionUID = 1
* 当版本号变成2之后,如果不重新序列化,反序列化时会出错,报异常与本地版本号冲突*/
ois.close();
}
}