Java:序列化流和反序列化流

1.定义

  • ObjectOutputStream  : 序列化流属于高级流,字节流,负责输出数据。
  • ObjectlnputStream  : 与之对应有个输入流,叫做反序列化流。

2.初识序列化流/对象操作输出流

可以把Java中的对象写到本地文件中。

1.构造方法
  • public objectoutputstream(outputstream out): 把基本流包装成高级流。
2.成员方法 
  • public final void writeobject(object obj): 把对象序列化(写出)到文件中去。
3.注意

使用对象输出流将对象保存到文件时会出现NotSerializableException异常。

解决方案:需要让Javabean类实现Serializable接口。

接口内没有抽象方法,称为标记型接口

一旦实现了Serializable接口,就表示该对象可以被序列化。

案例1: 把一个对象写到本地文件当中

        //创建对象
        Student stu =  new Student("张三",123);
        //创建序列化对象
        ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("G:\\JavaReview\\day33\\d.txt"));

        //写出数据
        oos.writeObject(stu);
        oos.close();

 

3.反序列化流/对象操作输入流

可以把序列化到本地文件中的对象,读取到程序中来。

但是,需要注意:

序列化流写到文件中的数据是不能修改的,一旦修改就无法再次读回来了。

1.构造方法
  • public objectInputstream( Inputstream out):把基本流变成高级流。
2.成员方法
  • public object readobject():把序列化到本地文件中的对象,读取到程序中来。 

案例1:将文件中的序列化文件读取到控制台

        //创建反序列化流的对象
        ObjectInputStream ois = new ObjectInputStream(new FileInputStream("G:\\JavaReview\\day33\\d.txt"));

        //读取数据
        Object o = ois.readObject();

        //打印对象
        System.out.println(o);//Student{name = 张三, age = 123}

        ois.close();
3.serialVersionUID(序列号,版本号)

保证修改成员属性时,能正确的被反序列化。

书写格式:

    private static final long serialVersionUID = 2992011964165482380L;
4.瞬态关键字:transient

作用:不会把当前属性序列化到本地文件中。         

书写格式:

    private transient Integer age;

 

你可能感兴趣的:(Java,SE,java,开发语言)