对象流:ObjectInputStream和ObjectOutputStream
1.将 (int num = 100) 将该数据保存到文件中,并且能够从文件恢复
2.该上面的操作;就是能够将基本数据类型或者对象进行序列化和反序列化操作
序列化和反序列化
1.序列化就是在保存数据时,保存数据的值和数据类型
2.反序列化就是在恢复数据时,恢复数据的值和数据类型
3.需要让某个对象支持序列化机制,则必须让其类是可序列化的。为了使某个类是可序列化的,该类必须实现一下两个接口之一
3.1)Serializable //这是一个标记接口,吗,没有方法
3.2)Externalizable //该接口有方法需要实现, 一般使用Serializable
基本介绍
1.功能:提供了对基本类型或对象类型的序列化和反序列化的方法
2.ObjectOutputStream 提供序列化功能
3.ObjectInputStream 提供反序列化功能
ObjectOutputStream:案例
//1.设置文件创建的地址; // 序列化后,保存的文件格式,不是文本,而是按照它的格式来保存 String fileName = "d:\\work\\data.txt"; //2.创建对象 ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(fileName)); //3.序列化数据到d:\work\data.txt oos.writeInt(100);//int -> Integer(实现了 Serializable) oos.writeBoolean(true);//boolean -> Boolean(实现了 Serializable) oos.writeChar('H');//char -> Character(实现了 Serializable) oos.writeDouble(11.4);//double -> Double (实现了 Serializable) oos.writeUTF("沧海一声笑");//String //保存一个对象 oos.writeObject(new Dog("小黄",20)); //4.关闭流 oos.close(); System.out.println("数据保存完毕(序列化)");
ObjectInputStream
//1.指定反序列化的文件, String fileName = "d:\\work\\data.txt"; //2.创建对象 ObjectInputStream ois = new ObjectInputStream(new FileInputStream(fileName)); //3.反序列化 //1).读取(反序列化)的顺序需要和保存数据(序列化)的顺序一致;否则将会报出异常 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中的name //需要将Dog类拿过来 Dog dog2= (Dog)dog; String name = dog2.getName(); System.out.println(name); //4.关闭流 ois.close();
对象处理流使用
注意事项和细节说明
1.读写顺序要一致
2.要求序列化或反序列化对象。需要实现:Serializable
3.序列化的类中建议添加SerialVersionUID,为了提供版本的兼容性
4.序列化对象时,默认将里面所有属性都进行序列化,但除了static或transient修饰的成员
5.序列化对象时,要求里面属性的类型也需要实现序列化接口
6.序列化具备可继承性,也就是如果某类已经实现了序列化,则它的所有子类也已经默认实现了序列化