序列化流与反序列化流 打印流

        用于从流中读取对象的操作流 ObjectInputStream   称为反序列化流

        用于向流中写入对象的操作流 ObjectOutputStream   称为序列化流

特点:用于操作对象。可以将对象写入到文件中,也可以从文件中读取对象。

  • 对象序列化流ObjectOutputStream,

    对象反序列化流ObjectInputStream

        ObjectOutputStream将 Java 对象的基本数据类型和图形写入 OutputStream。可以使用 ObjectInputStream读取(重构)对象。通过在流中使用文件可以实现对象的持久存储。

注意:只能将支持 java.io.Serializable 接口的对象写入流中


序列完成后会在指定盘符下生成指定文件

反序列化会将序列化的文件读取到内存对象中


  •  序列化接口

当一个对象要能被序列化,这个对象所属的类必须实现Serializable接口。否则会发生异常NotSerializableException异常。

同时当反序列化对象时,如果对象所属的class文件在序列化之后进行的修改,那么进行反序列化也会发生异常InvalidClassException。发生这个异常的原因如下:

l  该类的序列版本号与从流中读取的类描述符的版本号不匹配

l  该类包含未知数据类型

l  该类没有可访问的无参数构造方法

Serializable标记接口。该接口给需要序列化的类,提供了一个序列版本号。serialVersionUID. 该版本号的目的在于验证序列化的对象和对应类是否版本匹配。

添加了serialversionuid后,就算再修改了Person类中的属性,反序列化任然可以读取相应数据到内存对象中


  • 瞬态关键字transient

        当一个类的对象需要被序列化时,某些属性不需要被序列化,这时不需要序列化的属性可以使用关键字transient修饰。只要被transient修饰了,序列化时这个属性就不会被序列化了。

        同时静态修饰也不会被序列化,因为序列化是把对象数据进行持久化存储,而静态的属于类加载时的数据,不会被序列化。


  • 打印流

1.1  打印流的概述

打印流添加输出数据的功能,使它们能够方便地打印各种数据值表示形式.

打印流根据流的分类:

l  字节打印流  PrintStream

l  字符打印流  PrintWriter

l  方法:

void print(String str): 输出任意类型的数据,

void println(String str): 输出任意类型的数据,自动写入换行操作

l  代码演示:

 /*

 * 需求:把指定的数据,写入到printFile.txt文件中

 *

 * 分析:

 * 1,创建流

 * 2,写数据

 * 3,关闭流

 */

public class PrintWriterDemo {

    public static void main(String[] args) throws IOException {

        //创建流

        //PrintWriter out = new PrintWriter(new FileWriter("printFile.txt"));

        PrintWriter out = new PrintWriter("printFile.txt");

        //2,写数据

        for(int i=0; i<5; i++) {

            out.println("helloWorld");

        }

        //3,关闭流

        out.close();

    }

}

猜你喜欢

转载自blog.csdn.net/wzc1991520/article/details/80193962
今日推荐