序列化与反序列化时,只有实现了Java.io.Serializabled的接口的类的对象才能被序列化。序列化时文件内容为二进制,实现了平台无关性。
(序列化 ObjectOutputStream可以包装其他类型的输出流(new FileOutputStream())),
(反序列化(ObjectInputStream)可以包装其他类型的输出流(new FileInputStream()))
//序列化 输出流
ObjectOutputStream oos=null;
//反序列化 输入流
ObjectInputStream ois=null;
try {
oos =new ObjectOutputStream(new FileOutputStream
("H:\\i_o\\序列化反序列化\\test1.txt"));
Student student=new Student("小红",18,'女'); //二进制文件内容
oos.writeObject(student);
System.out.println("文件序列化完成!");
ois=new ObjectInputStream(new FileInputStream
("H:\\i_o\\序列化反序列化\\test1.txt"));
//强制类型转换
Student student1 =(Student)ois.readObject();
//把反序列化的文件对象 读到控制台
System.out.println("******文件反序列化得到信息******");
System.out.println("学生信息:"+student1.getName()+"\t"
+student1.getAge()+"\t"+student1.getGender());
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}finally{
try {
oos.close();
ois.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
学生类
public class Student implements Serializable{
//想被序列化的对象只有通过实现 Serializable接口才能被序列化
private String name;
private int age;
private transient char gender;
//transient 使属性不被序列化
public Student(String name, int age, char gender) {
super();
this.name = name;
this.age = age;
this.gender = gender;
}
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 char getGender() {
return gender;
}
public void setGender(char gender) {
this.gender = gender;
}
}