对象流
-
对象流ObjectOutputStream/ObjectInputStream
- 增强了缓冲区功能
- 增强了读取八种基本数据类型和字符串功能
- 增强了读写对象的功能:
- readObject():从流中读取一个对象
- writeObject(Object obj):将一个对象写入流中
-
使用流传输对象的过程称为序列化(内存写入硬盘等存储设备)和反序列化(硬盘等存储设备写入内存)
-
序列化和反序列化
/** * 序列化,把对象写入硬盘 * 要求: * (1)对象类型继承Serializable接口(标记接口,表示该类可被序列化) * (2)对象中的引用数据类型字段,该引用类也需要实现Serializable接口。 */ public class objectOutputStream { public static void main(String[] args) throws Exception{ //创建基础节点流 FileOutputStream fos = new FileOutputStream("E:\\student.bin");//二进制文件 //创建对象流 ObjectOutputStream oss = new ObjectOutputStream(fos); //实例化对象 Student student = new Student("zhangsan"); oss.writeObject(student); oss.close(); } }/** * 反序列化,ObjectInputStream */ public class objectInputStream { public static void main(String[] args) throws Exception{ //创建基础节点流 FileInputStream fis = new FileInputStream("E:\\student.bin"); //创建对象输入流,反序列化 ObjectInputStream ois = new ObjectInputStream(fis); //读取文件 Student student =(Student)ois.readObject(); ois.close(); System.out.println("finish"); System.out.println(student); } } //输出结果: finish Student{name='zhangsan'} -
对象类型继承Serializable接口(标记接口,表示该类可被序列化)
-
对象中的引用数据类型字段,该引用类也需要实现Serializable接口。
-
使用transient修饰的属性不能被序列化。
-
序列化版本号ID,保证序列化的类和反序列化的类是同一个类。
-
静态属性不能被序列化。
-
可以借助集合序列化多个对象。
public class Student implements Serializable{ public Adress address;//Adress类也需要实现Serializable接口 transient int age;//age属性不能被序列化 private static final serialVersion = 100L; static int number;//静态属性不可序列化 }
浙公网安备 33010602011771号