Java_基础—对象操作流ObjecOutputStream/ObjectInputStream

创建Person类,属性为name, age. 该类继承接口Serializable

package com.soar.bean;

import java.io.Serializable;

public class Person implements Serializable{
    /**
     * * 注意
     * 要写出的对象必须实现Serializable接口才能被序列化
     * 不用必须加id号
     * 
     * Exception in thread "main" java.io.InvalidClassException: 
     * com.soar.bean.Person; local class incompatible: 
     * stream classdesc serialVersionUID = 1, 
     * local class serialVersionUID = 2
     */
    private static final long serialVersionUID = 2L;
    private String name;
    private int age;
    private String gender;

    public Person() {
        super();

    }
    public Person(String name, int age) {
        super();
        this.name = name;
        this.age = age;
    }
    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 + "]";
    }

}

创建ObjectOutputStream类,在e.txt中写出对象

package com.soar.otherio;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.util.ArrayList;

import com.soar.bean.Person;

public class Demo3_ObjectOutputStream {
    /*
****** 1.什么是对象操作流
    * 该流可以将一个对象写出, 或者读取一个对象到程序中. 
    * 也就是执行了序列化和反序列化的操作.
****** 2.使用方式
    * 写出: new ObjectOutputStream(OutputStream), writeObject()
    * 
    * 序列化:将对象写到文件上
    * 
     */
    public static void main(String[] args) throws IOException {
        //writeObject();
        //对象操作流优化(将对象存储在集合中写出)
        Person p1 = new Person("张三",23);
        Person p2 = new Person("李四",24);
        Person p3 = new Person("王五",25);
        Person p4 = new Person("赵六",26);

        ArrayList<Person> list = new ArrayList<>();
        list.add(p1);
        list.add(p2);
        list.add(p3);
        list.add(p4);

        ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("e.txt"));
        oos.writeObject(list);          //把整个集合对象一次写出
        oos.close();

    }

    private static void writeObject() throws IOException, FileNotFoundException {
        Person p1 = new Person("张三",23);
        Person p2 = new Person("李四",24);

        ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("e.txt"));
        oos.writeObject(p1);
        oos.writeObject(p2);

        oos.close();
    }

}

创建ObjectInputStream类,将存储在e.txt中的对象,写入

package com.soar.otherio;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.util.ArrayList;

import com.soar.bean.Person;

public class Demo4_ObjectInputStream {
    /*
     * 读取: new ObjectInputStream(InputStream), readObject()
     * ObjectInputStream 
     * 对象输入流,反序列化
     */
    public static void main(String[] args) throws IOException, IOException, ClassNotFoundException {
        //writeObject();
        ObjectInputStream ois = new ObjectInputStream(new FileInputStream("e.txt"));
        ArrayList<Person> list = (ArrayList<Person>) ois.readObject();  //将集合对象一次读取

        for (Person person : list) {
            System.out.println(person);
        }
        ois.close();
        /*
         *  Person [name=张三, age=23]
            Person [name=李四, age=24]
            Person [name=王五, age=25]
            Person [name=赵六, age=26]
         */

    }

    private static void writeObject() throws IOException,
            FileNotFoundException, ClassNotFoundException {
        ObjectInputStream ois = new ObjectInputStream(new FileInputStream("e.txt"));

        Person p1 = (Person) ois.readObject();
        Person p2 = (Person) ois.readObject();
        //Person p3 = (Person) ois.readObject();    //EOFException 当文件读取到了末尾时出现EOFException


        System.out.println(p1);     //Person [name=张三, age=23]
        System.out.println(p2);     //Person [name=李四, age=24]
    }

}
posted @ 2017-07-28 16:17  Soar_Sir  阅读(208)  评论(0编辑  收藏  举报