对象经常要通过I/O(输入输出设备)进行传送,让你写程序传递对象,你会怎么做?把对象的状态数据用某种格式写入到硬盘,Person->“zxx,male,28,30000”àPerson,既然大家都要这么干,并且没有个统一的干法,于是,sun公司就提出一种统一的解决方案,它会把对象变成某个格式进行输入和输出,这种格式对程序员来说是透明(transparent)的,但是,我们的某个类要想能被sun的这种方案处理,必须实现Serializable接口。
ObjectOutputStream.writeObject(obj);//对象输出流保存对象,要使用序列化操作
Object obj = ObjectInputStream.readObject();//对象输入流读取对象,使用反序列化操作
序列化id的作用是什么呢,用以下场景来解释它的作用:
假设两年前我保存了某个类的一个对象,这两年来,我修改该类(类名保持不变),删除了某个属性和增加了另外一个属性,两年后,我又去读取那个保存的对象,会有什么结果?Sun的jdk无法获知你保存的对象到底是未修改前的类的对象还是修改后的类的对象。为此,一个解决办法就是在类中增加版本号信息,每一次类的属性修改,都应该把版本号升级一下,这样,在读取时,比较存储对象时的版本号与当前类的版本号,如果不一致,则直接报版本号不同的错!,此处的版本号其实就是序列化ID