一.6File类与IO流
9序列化流
9.1序列化和反序列化的概述
序列化:把对象以流的方式写入到文件中保存
反序列化:把文件中保存的対象,以流的方式湊取出来使用
序列化和反序列化的时候,会抛出NotSerializableException没有序列化异常 类通过实现java. io. Serializable接口以启用其序列化功能。未实现此接口的类将无法使其任何状态序列化或反序列化。 Serializable接口也叫标记型接口 要进行序列化和反序列化的类必须实现Serializable接口,就会给类添加一一个标记 当我们进行序列化和反序列化的时候,就会检测类上是否有这个标记 有:就可以序列化和反序列化 没有:就会抛出NotSerializableException异常 去市场买肉-->肉上有一个蓝色章(检测合格)-->放心购买-->买回来怎么吃随意
9.2对象的序列化流
java. io. ObjectOutputStream extends OutputStream ObjectOutputStream:对象的序列化流 作用:把对象以流的方式写入到文件中保存 构造方法: ObjectOutputStream(OutputStream out) 创建指定写入OutputStream 的ObjectoutputStreamot: OutputStream out :字节输出流 特有的成員方法: void writeObject(Object obj) 将指定的对象写入ObjectOutputStreamo 使用歩驟: 1.创建objectoutputStream対象,杓造方法中传递字节输出流 2.使用0bjectoutputStream対象中的方法writeobject,把対象写入到文件中 3.釋放资源
9.3对象的反序列化流
java. io. ObjectInputStream extends InputstreamobjectInputstream:対象的反序列化流 作用:把文件中保存的対象,以流的方式湊取出来使用 杓造方法: ObjectInputstream( Inputstream in) 创建从指定InputStream湊取的ObjectInputstream。 参数: Inputstream in:字节愉入流 特有的成員方法: 0bject readobject() 从0bjectInputStream 读取対象。 使用歩驟: 1.創建0bjectInputstream象,杓造方法中传递字节輸入流 2.使用objectInputStream対象中的方法readobjecti读取保存対象的文件 3.釋放姿源 4.打印对象*/ /*readobject方法声明抛出了ClassNotFoundException(class文件找不到异常)当不存在对象的class文件时抛出此异常 反序列化的前提: 1.类必须实现Serial izoble 2.必须存在类对应的class文件
9.4transient关键字
static关键字:静态关鍵字 静态优先于非静杰加载到内存中(静态代先于対象迸入到内存中)被static修怖的成員変量不能被序列化的,序列化的都是対象 private stotic int age; oos . writeobject(new Person("小美女 ”,18)); 0bject o = ois.read0bject(); Person{name-’小美女',age-0} transient关鍵字:瞬态美鍵字 被transient修怖成員変量,不能被序列化 Tprivate transient int age; oos . writeobject(new Person("小美女 ”,18)); 0bject o = ois.read0bject(); Person{name=’小美女', age-0}
9.5InvalidClassExcepyion异常原理
private static final long serialVersionUID=1L;
9.6练习序列化集合
10打印流
java. io. PrintStream:打印流 PrintStream为其他输出流添加了功能,使它们能够方便地打印各种数据值表示形式。 PrintStream特点: 1.只负责数据的输出,不负责数据的读取 2.与其他输出流不同,PrintStream 永远不会抛出IOException 3.有特有的方法,print, println void print (任意类型的值) void println(任意类型的值并换行) 构造方法: PrintStream(File file):输出的目的地是一个文件 PrintStream(OutputStream out ):输出的目的地是一个字节输出流 PrintStream(String fileName) :输出的目的地是一个文件路径 PrintStream extends OutputStream 继承自父类的成员方法: - public void close() :关闭此输出流并释放与此流相关联的任何系统资源。 - public void flush() :刷新此输出流并强制任何缓冲的输出字节被写出。 - public void write(byte[] b):将b.length字节从指定的字节数组写入此输出流。 注意: 如果使用继承自父类的write方法写数据,那么查看数据的时候会查询编码表97->a 如果使用自己特有的方法print/println方法写数据,写的数据原样输出97->97
可以改变输出语句的目的地(打印流的流向) 输出语句,默认在控制台输出 使用System. setOut方法改变输出语句的目的地改为参数中传递的打印流的目的地 static void setout (PrintStream out ) 重新分配“标准"输出流。