A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 禅伤 中级黑马   /  2014-8-1 23:31  /  824 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

看了毕老师的视频还是没有弄清为什么person对象要实现序列化?
附代码:
package com.hubj.objectDemo;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;

public class Objext {

        /**
         * @param args
         * @throws ClassNotFoundException
         */
        public static void main(String[] args) throws IOException, ClassNotFoundException {
                write();
                read();
        }

        private static void read() throws IOException, ClassNotFoundException {
                ObjectInputStream ois = new ObjectInputStream(new FileInputStream(
                                "g:\\aa..txt"));
                Person p = (Person) ois.readObject();
                System.out.println(p);
        }

        private static void write() throws IOException {
                ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(
                                "g:\\aa..txt"));
                oos.writeObject(new Person("zhang", 56));
                oos.close();
        }

}


------------------------------------------------------------------------------------
package com.hubj.objectDemo;

import java.io.Serializable;

public class Person implements Serializable{

        public static final long serialVersionUID = 42L;

        private String name;
        transient int age;
        public static void main(String[] args) {
                // TODO Auto-generated method stub

        }
        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() {
                // TODO Auto-generated method stub
                return name+":"+age;
        }

}





3 个回复

倒序浏览
你把一个对象写到硬盘上,这个对象就不会在改变了,但是你还可以改你的源代码,修改类,但是编译器并不知道类被修改了。仍把你写在硬盘上的对象当做修改后的类的对象,这显然是错误的。如果实现Serializable,每个类就会生成相应的串号,只要类修改了,串号随之修改。编译器就可以根据串号,判断硬盘上对象的所属类改变没。实现Serializable接口是一种安全机制。
回复 使用道具 举报
楼上说的好像很专业的样子。我以前老师说你不用管,你只管实现它就行了。所以我到现在也不知道为什么。
回复 使用道具 举报
hmid 来自手机 中级黑马 2014-8-2 00:33:31
板凳
不太清楚,学习
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马