黑马程序员技术交流社区

标题: Serializable小疑惑 [打印本页]

作者: 禅伤    时间: 2014-8-1 23:31
标题: Serializable小疑惑
看了毕老师的视频还是没有弄清为什么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;
        }

}






作者: java木    时间: 2014-8-2 00:08
你把一个对象写到硬盘上,这个对象就不会在改变了,但是你还可以改你的源代码,修改类,但是编译器并不知道类被修改了。仍把你写在硬盘上的对象当做修改后的类的对象,这显然是错误的。如果实现Serializable,每个类就会生成相应的串号,只要类修改了,串号随之修改。编译器就可以根据串号,判断硬盘上对象的所属类改变没。实现Serializable接口是一种安全机制。

作者: alvinbx    时间: 2014-8-2 00:14
楼上说的好像很专业的样子。我以前老师说你不用管,你只管实现它就行了。所以我到现在也不知道为什么。
作者: hmid    时间: 2014-8-2 00:33
不太清楚,学习




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2