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

来源:互联网 发布:网络专供是真的假的 编辑:程序博客网 时间:2024/06/06 06:40

创建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]    }}
原创粉丝点击