这节课我们来讲对象处理流,首先来说说两个概念: 序列化和反序列化

 

以下内容摘自菜鸟教程:

Java 提供了一种对象序列化的机制,该机制中,一个对象可以被表示为一个字节序列,该字节序列包括该对象的数据、有关对象的类型的信息和存储在对象中数据的类型。

 

将序列化对象写入文件之后,可以从文件中读取出来,并且对它进行反序列化,也就是说,对象的类型信息、对象的数据,还有对象中的数据类型可以用来在内存中新建对象。

 

通俗来讲:

将对象写到文件里就叫序列化,从文件里读取出一个对象叫反序列化

 

注意:

  1. 不是所有对象都可以序列化,只有实现了java.io.Serializable接口的类的对象可以被序列化 ,除此之外数组也可以被序列化
  2. 不是对象里的所有属性都需要被写入到文件里,对于不需要被写入到文件里的属性可以在声明时加上transient关键字

 

接下来就是我们的主角了:

ObjectInputStream: 负责从文件中读取对象(反序列化)

ObjectOutputStream: 负责将对象写入文件(序列化)

 

构造器和常用方法自己去查API文档,我给个Demo大家看看就行:

 

Demo:

public class ObjectDisposeStream {



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

        Person person = new Person("xiaoye",20);

        String filepath = "F:\\code\\java\\object.txt";

        sera(filepath,person);

        Object obj = read(filepath);

        System.out.println(obj);

    }



    public static void sera(String filepath,Object obj) throws IOException {

        File file = new File(filepath);

        if (!file.exists())

            file.createNewFile();



        ObjectOutputStream objectOutputStream = new ObjectOutputStream(new FileOutputStream(file));

        objectOutputStream.writeObject(obj);





    }



    public static Object read(String filepath) throws IOException, ClassNotFoundException {

        ObjectInputStream objectInputStream = new ObjectInputStream(new FileInputStream(filepath));

        return objectInputStream.readObject();



    }

}



class Person implements Serializable {



    private String name;

    private transient int age//加上transient关键字表明在序列化时不需要将这个属性的值写入文件



    public Person(String name, int age) {

        this.name = name;

        this.age = age;

    }



    public Person(){}



    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 +

                '}';

    }

}