演示ObjectOutStream(序列化)和ObjectInputStream(反序列化)的使用
- 序列化
package com.io.outputstream_; import java.io.FileOutputStream; import java.io.ObjectOutputStream; import java.io.Serializable; /** * 演示ObjectOutStream的使用 */ public class ObjectOutStream_ { public static void main(String[] args)throws Exception { //序列化后,保存的文件格式,不是保存文本,而是按照它的格式来保存 String filePath="d:\\data.dat"; ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(filePath)); //序列化数据到d:\data.dat oos.write(100);//(自动装箱)int->Integer(实现了Serializable,因为Integer的父类是Number,而Number实现了Serializable接口) oos.writeBoolean(true);//(自动装箱)boolean->Boolean(实现了Serializable) oos.writeChar('a');//char->Character(实现了Serializable) oos.writeDouble(9.5);//double->Double(实现了Serializable) oos.writeUTF("沐晴学习");//String(实现了Serializable) //保存一个dog对象 oos.writeObject(new Dog("旺财",10)); oos.close(); System.out.println("数据保存完毕(序列化形式)"); } } //如果需要序列化某个类的对象,实现Serializable接口 class Dog implements Serializable { private String name; private int age; public Dog(String name,int age){ this.name=name; this.age=age; } }
- 反序列化
package com.io.inputstream_; import jdk.swing.interop.SwingInterOpUtils; import java.io.FileInputStream; import java.io.IOException; import java.io.ObjectInputStream; /** * ObjectInputStream的使用 */ public class ObjectInputStream_ { public static void main(String[] args) throws IOException, ClassNotFoundException { //指定反序列化文件 String filePath="d:\\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.getClass()); System.out.println("狗的信息"+dog);//底层会把Object——>Dog //关闭流,关闭外层流即可,底层流会自动关闭 ois.close(); } }