1.序列化保存
public class ObjectOutPutStream_ {
public static void main(String[] args) throws Exception {
//序列化后保存的文件格式,不是纯文本,而是按照它的格式来保存
String filePath = "e:\\data.dat";
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(filePath));
//序列化数据到e:\data.dat
oos.writeInt(100);//int-->Integer(实现了Serializable)
oos.writeBoolean(true);//boolean-->Boolean(实现了Serializable)
oos.writeChar('a');//char-->Character(实现了Serializable)
oos.writeDouble(99.9);//double-->Double(实现了Serializable)
oos.writeUTF("本草纲目");//String(实现了Serializable)
oos.writeObject(new Dog("小黄",3));
oos.close();
}
}
//如果需要保存某个类的对象,该类必须实现序列化接口
class Dog implements Serializable {
private String name;
private int age;
public Dog(String name, int age) {
this.name = name;
this.age = age;
}
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;
}
@Override
public String toString() {
return "Dog{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
2.反序列化读取
public class ObjectInputStream_ {
public static void main(String[] args) throws IOException, ClassNotFoundException {
//指定反序列化的文件
String filePath = "e:\\data.dat";
ObjectInputStream ois = new ObjectInputStream(new FileInputStream(filePath));
//读取(反序列化)的顺序需要和你保存数据(序列化)的顺序一致,否则会出现异常
System.out.println(ois.readInt());
System.out.println(ois.readBoolean());
System.out.println(ois.readChar());
System.out.println(ois.readDouble());
System.out.println(ois.readUTF());
Object dog = ois.readObject();
System.out.println(dog);
//注意
//如果希望调用Dog的方法,需要向下转型
Dog dog2 = (Dog)dog;
//需要我们将Dog类的定义,放到可以引用的位置,这样才可以调用Dog类的方法
System.out.println(dog2.getName());
ois.close();
}
}