java ObjectInputStream和ObjectOutputStream与Serializable

Java中ObjectInputStream 与 ObjectOutputStream这两个包装类可用于输入流中读取对象类数据和将对象类型的数据写入到底层输入流 。ObjectInputStream 与 ObjectOutputStream 类所读写的对象必须实现了 Serializable 接口。
ObjectInputStream :对象字节输入流、将一个序列化的对象通过底层字节输入流读取到程序中、与ObjectOutputStream相对应、实现了ObjectOut接口、而ObjectOut接口实现了DataOut接口、在DataOut接口定义的基础上扩展了读取对象、数组、字符串的功能、作为ObjectOut的实现类ObjectInputStream、它可以将使用ObjectOutputStream写入到底层输出流中的对象、数组、字符串读取到程序中、并还原成当初写入时的状态、这样我们就可以直接对这个对象进行操作。从而达到操作java对象、数组、字符串的目的。
ObjectOutputStream:ObjectOutputStream同样具有DataOutputStream功能的同时也具有将对象、数组字符串写入到底层字节输出流中的功能、当然ObjectOuputStream同样还实现了别的接口。
import java.io.Serializable;
import java.util.List;

/** * 一个对象若想通过ObjectOutputStream * 进行序列化,那么该对象所属的类必须实现 * Serializable接口 * 该接口没有定义任何抽象方法,实现该接口 * 仅仅用于标识当前类的实例可以被序列化 * @author Administrator * */
public class Person implements Serializable{
    /* * 当类的属性增加或修改了,若版本号不变 * 那么反序列化时会尽可能兼容现有版本 * 若版本号发生了改变,那么反序列化时会 * 抛出异常。 */
    private static final long serialVersionUID = 1L;
    private String name;
    private int age;
    private char gender;
    private double comm;
    private List<String> otherInfo;

    public String toString(){
        return name+","+age+","+gender+","
               +comm+","+otherInfo;
    }

    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;
    }

    public char getGender() {
        return gender;
    }

    public void setGender(char gender) {
        this.gender = gender;
    }


    public List<String> getOtherInfo() {
        return otherInfo;
    }

    public void setOtherInfo(List<String> otherInfo) {
        this.otherInfo = otherInfo;
    }

    public double getComm() {
        return comm;
    }

    public void setComm(double comm) {
        this.comm = comm;
    }

    public Person(String name, int age, char gender, double comm,
            List<String> otherInfo) {
        super();
        this.name = name;
        this.age = age;
        this.gender = gender;
        this.comm = comm;
        this.otherInfo = otherInfo;
    }
}
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
import java.util.List;

/** * ObjectOutputStream * 是一个高级流 * 该流的功能是可以将给定的对象转换为字节 * 后写出 * 用于对象序列化 * @author Administrator */
public class OOSDemo {
    public static void main(String[] args) throws IOException{
        List<String> list
            = new ArrayList<String>();
        list.add("家住在北京");
        list.add("汉民");
        list.add("其他信息");
        Person person 
            = new Person(
                    "张三",22,'男',2000,list);

        FileOutputStream fos
            = new FileOutputStream(
                                            "person.obj");

        ObjectOutputStream oos
            = new ObjectOutputStream(fos);
        /* * void writeObject(Object o) * ObjectOutputStream提供的方法 * 可以将给定的对象转换为一组字节后 * 写出 */
        oos.writeObject(person);

        System.out.println("序列化完毕");
        oos.close();
    }

}
import java.io.Serializable;
import java.util.List;
import java.io.FileInputStream;
import java.io.ObjectInputStream;
import java.io.IOException;

/** * ObjectInputStream * 是一个高级流 * 该留的作用是可以将一组字节转换为对应的 * 对象 * 用于对象的反序列化 * @author Administrator */
public class FileDemo {
    public static void main(String[] args) throws IOException, ClassNotFoundException{
        FileInputStream fis=new FileInputStream("person.obj");
        ObjectInputStream ois= new ObjectInputStream(fis);
        Person p = (Person)ois.readObject();

        System.out.println(p);

        ois.close();
    }
}

你可能感兴趣的:(java)