黑马程序员_IO流(对象的序列化和反序列化)

来源:互联网 发布:索尼 网络授权经销商 编辑:程序博客网 时间:2024/05/16 04:46

ObjectOutputStream-对象的序列化

    public class Io55_1 {        public static void main(String[] args) throws IOException {                writeObj();        }        public  static void writeObj() throws IOException, IOException {            ObjectOutputStream oos=new ObjectOutputStream(  new FileOutputStream("obj.object"));            //对象序列化。被序列化的对象必须实现Serializable接口            oos.writeObject(new Person("小强",30));            oos.close();        }}public class Person implements Serializable/*标记接口*/{    private String name;    private int age;    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;    }}

IO流(ObjectInputStream-对象的反序列化)

public class Io56_1 {    public static void main(String[] args) throws IOException, ClassNotFoundException {        readObj();    }    //反序列化(就是读取Object对象)    private static void readObj() throws  IOException, ClassNotFoundException {        ObjectInputStream ois=new ObjectInputStream(new FileInputStream("obj.object"));        Person p=(Person) ois.readObject();        System.out.println(p.getName()+":"+p.getAge());        ois.close();    }    public  static void writeObj() throws IOException, IOException {        ObjectOutputStream oos=new ObjectOutputStream(  new FileOutputStream("obj.object"));        //对象序列化。被序列化的对象必须实现Serializable接口        oos.writeObject(new Person("小强",30));        oos.close();    }}

其他提醒

/* * 实现Serializable接口用于给被序列化的类加入ID号 * 用于判断类和对象是不是同一个版本 * */public class Person implements Serializable/*标记接口*/{    /*IO57     * private static final long serialVersionUID = 9527L;如果不写。每一次编译的时候。可能会因为编译器的     * 不同,或者修改的Person类的内容。就会可能导致Serializable产生的serialVersionUID不一致。就会导致     * 不能够反序列化(读取文件中的内容)不能完成。     *      * 如果定义了该serialVersionUID = 9527L(值随便写);就不会让虚拟机自己计算产生serialVersionUID。故就可以     * 保证serialVersionUID的一致。就能够保证可以正常的反序列化     */    private static final long serialVersionUID = 9527L;    /*IO58     * transient:非静态数据不想被序列化可以使用这个关键字     *      * static修饰的数据。不会被序列化。(结果age=0,是因为在方法区里面会有一个默认值就是0)     * **/    private transient String name;    private static int age;    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;    }}
0 0
原创粉丝点击