00:00
行,那下面呢,咱们关于这个量的话呢,多给大家说几句啊,我们在这个PPT里边呢,其实有关于它的一个说明啊,就在这写的,说这个CUID呢,它是用来表明类的不同版本之间的一个兼容性,简言之呢,它的目的就是以序列化对象的形式进行版本控制,知道你是哪个版本,有关各个各版本的一个反序列化时是否兼容。啊,可能还有点抽象啊,这个我们先大概过一下这个内容,嗯,下边呢,还提到嗯,我在哪写的。啊,提到这个事儿,嗯,说如果呢,这个类没有显示的定义个这个静态的,其实这个静态常量了哈,你要没有显示的去定义这个静态的这个量。呃,静态的这个常量。那么它的值呢,是Java运行使环境根据类的内部细节自动生成的,也就是说呢,如果你要不显示的去写,它也会自动的帮我们生成一个,那生成这个呢,会不会有问题呢?是有可能的,尤其是当我们对当前的这个类进行一些修改的时候,就可能会出现问题。
01:10
啊,就是如果呢,你对当前这个类修改过,修改过以后呢,它自动生成的这个呢,可能就变了,那么你一开始序列化的时候呢,先理解这个事儿啊,我序列化的时候呢,我用的是这个person类。你要是加上这个CUID,那回头你再反序列话的时候呢,我还唯一的去识别你这个CUID,哎,没问题,我还能够给你还原成这这个类的一个对象,但是如果呢,我们没有加这样的一个常量啊,我现在呢,给它序列化了啊,存储到我们这个磁盘当中了,然后紧接着呢,我对这个person类呢修改了。我修改它以后呢,这个自动生成的这个CUID呢,就变了,它要一变,你这时候再去还原的话呢。他就找不到你当初序列化的时候那个,诶常量对应的那个person了,这个在还原的时候呢,就出问题了。
02:02
能大概理解这个事儿吧。能能理解我们下边演示一下啊,那首先呢,我先把它加上,加上呢是对的啊,我加上了,加上以后暂时呢,我们有这样的两个属性,哎,我们呢,再重新的去做一个序列化写啊。你看我这做了序列化了,那此时呢,它识别的这个版本呢,是这样的一个号的,那在这个基础之上,我们去加一些属性,比如说我加一个int型的ID。啊,那对应的我们去再提供它的一些结构,比如说呢,这个呃,构造器。加一个。加吧,然后呢,加上这个盖塞的方法。嗯,加了,然后呢,我们这个to string,嗯,这个给它改一下。这呢,我们相当于对当前这个类呢,做过一些修改,那修改完以后,你看回过来啊,这个时候就别再执行它了,这个因为咱们已经序列化到这儿了,我现在呢去执行这个叫反序列化,反序列化的时候呢,我们这个类虽然改了,但是你这个常量没有变,我们再去执行,那仍然能够反原回来。
03:09
哎,因为咱们当时序列化的时候呢,没有提供ID,所以这呢就是个默认值啊,哎,这个呢我们清楚,那清除完以后呢,我下边呢再去,呃,把刚才这个去掉,呃,咱们刚才呢是没有去啊,现在把它去掉呢,我再重复一下刚才这个过程,重复这个过程的话呢,我得先把这个ID呢再删掉哈,这个构造器呢,这不是也干掉。这个干掉。把这个呢,我们也重新生成一下。行,这我又还原回刚才这个情况了啊,还原回去以后呢,我把这个值呢,给它注释掉。入掉以后就相当于让它自动生成,我们呢先来执行,这个叫序列化。哎,这就执行完了,执行完以后,我们这个person呢,我对它进行一个修改,那还把咱们刚才说的这个,哎,这个in型的一个ID加上啊,提供它的这个,比如说构造器。
04:04
嗯,这个盖菜的方法。哎,再关于我们这个兔TH。行,这呢我就写好了,写好以后相当于我们对这个类呢进行过修改,修改以后呢,我们试图呢,进行一个反序列化。那这周一执行,那就挂了。那就相当于我们此时呢,对你当前这个类呢做过变化,变化以后呢,这个常量呢,它系统自动分配的,就识别的就有区别了,那变化以后我们这时候就没办法还原回来了,相当于你这块呢啊,这是一个时光门啊,说你你你也贴了个标签,说可虚化的啊,但是呢,没有提供这个唯一的标识,你就进去了,进去以后呢,在传输的过程当中啊,你是个对象,你所属的这个类呢,调整了。变了变了以后呢,这块呢,想给你还原回来,找不着这个泪了,你就还原不回来了,你就只能在二二进制流的世界当中穿梭是吧,你回不来了,就那要想能够回来必须保证,哎,你还得唯一的去识别这个类呢,到时候可以改,但是呢,你还得保证它是唯一的一个常量啊,这样你出来的时候呢,我才能够找到是哪一个类的对象,现在这个类呢,找不到了啊,就这个意思啊成,那大家呢,总结一下,就是你需要记住我们需要加上这样的一个常量啊就行。
05:21
这是我们说的第二个问题。
我来说两句