00:00
行,那刚才呢,其实我们已经把这个string的这个对象呢,做了一个序列化和反序列化,那大家呢,可能觉得说这个嗯在体会体会,那我们这儿呢,就可以去创建一个自定义的类,这个自定义类呢,我们就叫做一个person类,现在呢,我想把这个person类的对象序列化,或者叫持续化到我们一个文件当中,以一呢,再给它读到内存层面,那这个类的话呢,我们首先对它的属性结构进行一个啊扩充啊,啊就是咱们这老一套是吧。恩,4G类型的类目。啊,Private哎,Int类型的一个A,好提供必要的这些结构构造器啊,再来一个两个参数的啊,盖塞的方法。啊,托斯。行写成这样了,写成这样以后回过来我们呢,还在这个代码上面,我就写了,这呢是我们给它写出去,这呢是咱们序列化过程啊,写出去一个对象呢,是string类型,那我们可以接着呢,再往后去写,我这块呢,去OS点去做一个right object。
01:08
哎,这呢,我们就new一个person,这个person呢,我们给它起个名字啊,比如说啊,把咱们班某个同学呢,给它虚着化一下是吧,啊把这个网名。哎,王明呢,做一个序列化啊逗号啊,来一个年龄啊,23岁行,那这样的话呢,我们就相当于呢,给他造了一个对象,做了一个right right完以后需要注意的呢,就是给它做一个flash啊啊flash做一个刷新行,我现在要写完了,写完以后呢,注意我现在要执行了,执行的时候呢,大家需要关注会不会报错啊。啊,出错了。就notrelizable的exception,就是说我们当前的person类啊,你没有序列,不是可序列化的,就这个异常。
02:02
对,这里边我们通过person叫自定义的类,我们想体会一下,就是要想一个对象呢,可序列化,它得满足哪些要求是吧?嗯,咱们在这先写一下啊,说要想一个Java对象是可序列化的,呃,需要满足啊相应的这个要求啊,这个要求呢,咱们直接啊就建这个person类啊。哎,咱们就在这写了。现在呢,我们希望把这个person类的对象呢,给他做个持久化啊,这个我们就在这写,说person类需要满足啊满足啊说如下的要求啊,方可序列化。那满足哪些要求呢?对,首先呢,我们就提到一个接口,这个接口嗯,在这儿啊说呢,我们要想让某个对象呢,是支持序列化机制的,必须呢,让它实现下边两个接口之一,诶通常咱们用的比较多的呢,都是这个sable。
03:11
啊,说为什么我们刚才new string的时候呢,String也没有报错呀,对,你会发现这个string呢,它已经实现了我们的sirable,哎,这个sirible你看它还是IO下的,就是在我们现在IO这一章,你进行数据传输的时候啊,你要传对象呢,这些个叫可序列化的,OK,那我们要求这个person呢,也需要去implement啊,叫s leible。那直接我implement以后,你发现诶,好像也没有提示我写什么重写这个抽样方法啥的是吧?啊,那这呢,我们会发现这个sleible呢,它什么抽象方法也没有啊,竟然还有这样的接口,哎,确实有,那这个接口呢,通常我们习惯呢,称作叫标识接口了,它没有具体的一些这个方法需要你去实施的,或者叫实现的啊,就是一个标识,凡是实现这个接口的类。
04:09
都识别为你为你是可序列化的啊,是对于我们这个接口来讲啊,行这呢,我们就相当于是实现了这样的一个接口啊,这是第一个要求啊,需要实现接口。啊,这个接口呢,就是叫sable,这个单词又比较长。这个呢,你只要发音正的话,正确的话呢,基本上写的不会写太错啊S。Rear,啊liable,嗯,你要是发音有点过分的话,你肯定也写不对啊,嗯,这是第一个事,那我们呢这块把它呢称作一个叫标识接口啊了解一下那么广实验这个接口呢,还不行还不行,在我们的这个sir laervo的这个说明上面呢,他提到了说必须呢要哎提供一个呃,进入的一个Mo fair就是提供一个呃,相当于是一个属性,这个属性的要求是声明为他。
05:06
哎,我们把它呢拿过来,哎,放到我们这个类里边。当然了,在人家接口当中,人家是一个默认是public的了啊,那咱这块呢,需要显示的去写上一个public这个值的话呢,你就别跟他一样了,我们呢自己呢随便呢写一个值就行,浪类型的叫序列版本号,这个事儿咱们在哪讲过,对讲异常的时候,咱们说我自定义异常类是不是都要补一个这样的序列版本号,哎,当时我说呢,说咱们到后边讲到对象流的时候呢,给大家说一下这个事儿啊,就是在这讲啊,那这儿呢,我们补充它,其实呢,你也会看到我们string当中。是不是也有啊?啊,他这只不过写成private了啊,私有的了啊,我这写成public也行啊,你要private也OK啊,就不让让他外,让他在外边这个调啊,总之的话呢,我们一定要去提供一个叫C,呃,这个c version u ID啊,给它一个值,正的负的呢倒都行,但是必须要给一个啊,必须要给一个,这是我们说的这个这样的一个步骤。
06:09
啊,把这个补充一下说呢,需要啊当前类啊,提供一个全局常量啊,这个常量呢,就叫做zero version u ID,哎,执行它的一个值,这个值呢,没有严格要求,写一个就行,OK,写完了,写完以后下边呢,我们再试图来执行一下。首先进行一个序列化。诶大家看此时呢,我们这个对象呢,就可序列化了,那相当于我们这个person呢,就被我们给持久化到这个文件里了,那下边呢,我们去读一下啊,读的时候呢,咱们注意还是要有顺序的,你当时写的时候呢,先写的是string,读的时候是不是也得先读string,对,当然了,咱们真正开发当中啊,大家一般你要传输的话都是某一个类型的,你要是传队这个持久化对象或者传输对象要string都string,要person都person,不会像咱这样一会儿一个string,一会一个person,不会这样子的啊传的话呢,都是基本上都是一个类型的,那这呢,咱们是一个演示了啊,那我这read的一个object啊,接收为是一个object,或者呢,我在这直接就做一个强转了。
07:24
哎,它就是一个person哎,我们呢,也对这个person呢,进行一个set out看一下啊,仅此而已啊行,那我们下面下边呢来执行,哎,这个我上面加flash了吧。加了啊。行,哎,这样的话呢,我们就看到我呢,从这个磁盘当中,把我们这个对象呢,给他读过来了。哎,就是这样的一个情况啊,就大家呢,可以稍微形象一点去理解咱们说的这个这个这个person哈,这个呢,就就就好比是一个人一样,大家呢,就是现在是真实的一个人啊,你这个人的话呢,嗯,咱们这个脑洞一下啊,现在呢,讲的这个序列化机制,说这个对象呢,可以传输,就好比是你呢。
08:10
啊,有一个这种虽然叫时光门一样啊,哎,你从这就可以进去,进去以后的话呢,就把你打成一个二进制流是吧?哎,你就在地球的可能另一端,比如美国这块呢,呃,也有个门,你就出来了,出来以后呢,呃,你就能够还原成内存,呃还原成一个真实的人。啊,你可以稍微这样点,形象点去理解,咱们这个呢,是通过一个时光门,就相当于咱们这里边通过这个网络来把你进行一个传输嘛。对吧,哎,就这意思啊,但是传输的话呢,得有个要求,首先呢,你这个人的话呢,你得贴上一个标签啊,标签呢,就是你得实现一下c reliable,就这个人呢,你不能往里跳啊,你往里一跳的话呢,你要不是可序列化的就挂了是吧?哎,先得保证你是可序列化的啊,这个就过去,那么为什么还要提供一个叫zero version u ID呢。
09:04
你跳进去了。别人也跳进去了,假设有好多二进制流,你可以想象一下,就是假设里边就混乱了,混乱以后你出来以后,这个你的脑袋跟那个人的脑袋换了一下是吧,身子没换,这就乱套了嘛。那怎么办呀,我是不是给你当前这个对象,或者你这个当前这个类,我给你唯一的一个标识是吧?哎,那这个标识能够使得你在传输的过程当中再还原,还原的时候呢,说这拿到一个二进制流,说这个二进制流里边这个数据是一个人还是一个狗。啊,一看你这个希尔,我神犹太利啊,像是个人的是吧?哎,真的就给你还原成一个人的对象。啊,这个时候呢,我们这个,呃,常量你就知道它的意思啊,就是为了识别你到底是哪个类。哎,我们要加上一个这样的一个标识。嗯,那有的同学呢,可能自己在写的时候呢,一不小心把这个标识呢给丢了,丢了以后呢,发现好像诶也没事啊,你看我丢了啊,丢了以后我们再重新再做一个序列化。
10:09
写好了再去执行,这个叫反序列化。是不是也出来了?说不加呢,是不是也可以呢,不加不行,对不加呢是会出问题的,哎,为什么会出问题,哎,我们呢,要想解释就得把这个事儿呢,还得再稍微的多说几句啊,先把这个先停一下啊。
我来说两句