Java学习笔记32(IO:序列化流)

对象中的数据 ,以流的形式,写入到文件中保存,过程称为写出对象,对象的序列化

  ObjectOutputStream将对象写到序列中,实现序列化

在文件中,以流 的形式,将对象读取出来,过程称为读取对象,对象的反序列化

  ObjectInputStream将文件对象读取出来,实现反序列化

示例:

package com.zs.Demo;

import java.io.Serializable;

public class Person implements Serializable {
    private String name;
  //age不会被序列化
private transient int age; public Person(String name, int age) { this.name = name; this.age = age; } public Person() { super(); } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public String toString() { return "Person{" + "name='" + name + '\'' + ", age=" + age + '}'; } }

测试类:

package com.zs.Demo;

import java.io.*;

public class Demo {
    public static void main(String[] args) {
        try {
            fun();
            fun2();
        } catch (Exception e) {
            e.printStackTrace();
        }

    }
    //反序列化流
    private static void fun2() throws Exception {
        //创建文件输入流对象
        FileInputStream f=new FileInputStream("h:\\a.txt");
        //创建反序列化流对象
        ObjectInputStream os=new ObjectInputStream(f);
        //读文件中的对象
        Object obj = os.readObject();
        System.out.println(obj);
        //关闭流
        os.close();

    }
    //对象的序列化,将对象存到文件中
    private static void fun() throws IOException {
        //创建文件输出流对象
        FileOutputStream f=new FileOutputStream("h:\\a.txt");
        //创建序列化流对象
        ObjectOutputStream os=new ObjectOutputStream(f);
        //创建对象
        Person p=new Person("张三",18);
        //将对象写到文件中
        os.writeObject(p);
        //关闭序列化流
        os.close();
    }
}

注意事项:

  1.对象若要序列化,对象类必须实现Serializable接口(类通过实现 java.io.Serializable 接口以启用其序列化功能。未实现此接口的类将无法使其任何状态序列化或反序列化。)

    这个接口没有方法,称为标记性接口,起到标记作用,只有别标记的类才可以序列化;

  2.静态不可以序列化:给age加上static修饰符,然后序列化,发现输出age=0

     原因:对象序列化,而静态不属于对象,属于类,对象不包含静态,所以静态不能序列化,为零原因是静态变量默认为0;

  2.transient关键字,阻止成员变量序列化,如果不想让变量序列化,又不能使用静态修饰符,就用transient关键字

posted @ 2019-03-27 14:47  Zs夏至  阅读(138)  评论(0编辑  收藏  举报