package inputstream; import outputstream.Dog; import java.io.FileInputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.Serializable; public class ObjectInputStream_ { public static void main(String[] args) throws IOException,ClassNotFoundException { String filePath = "e:\\date.dat"; //指定反序列化文件 ObjectInputStream ois = new ObjectInputStream(new FileInputStream(filePath)); //读取 //1.读取(反序列化)的顺序需要和你保存数据(序列化)的顺序一致 //2.否则会出现异常 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()); //dog的编译类型是Object,dog的运行类型是Dog Object dog = ois.readObject(); System.out.println("运行类型="+ dog.getClass()); System.out.println("dog信息=" + dog);//底层 object ->Dog //如果希望调用dog的方法,需要向下转型 //需要我们将Dog类的定义,拷贝到可以引用的位置 Dog dog2 = (Dog)dog; System.out.println(dog2.getName()); ois.close(); } }
package outputstream; import java.io.Serializable; //如果休要序列化某个类的对象,实现Serializable public 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 + '}'; } }
package outputstream; import java.io.FileOutputStream; import java.io.ObjectOutputStream; import java.io.Serializable; public class ObjectOutStream_ { public static void main(String[] args) throws Exception{ String filePath = "e:\\date.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(9.5);//double->Double(实现了Serializable) oos.writeUTF("水果在");//String //创建一个dog对象 oos.writeObject(new Dog("wang cai",10)); oos.close(); System.out.println("数据保存完毕(序列化形式)"); } }