00:00
好,接下来我们看一下这个hi款,它到底怎么实现的这个序列化哈,那么首先看一下源码吧,源码里面按一下shift shift哈,嗯,序列化wi,然后点一下这个include。那然后我们这里面找hi doop对吧?哎,Hi,那你看一下对吧,Org,阿帕奇had下面有一个right包接口。那write包接口里面我们重写了哪些方法呢?一个呢是write方法,另一个呢是read,那write和read很好理解,你看一下上面这个解释。说civilized files of this project啊,To啥意思啊,序列化数据,哎,也是用于序列化的方法,那下面这个解释呢?反序列化文件是吧?哎,那这就是read啊,相当于啊是比如说这是两个对象,那第一个对象呢,是调用这个right方法持久化到磁盘,然后呢,下一个呢,这是read,比如说下一个把这个对象拷过来之后,加载到内存的过程当中,进行一个反序列化,哎,调用它。
01:08
这么两个过程哦,这是虚列化和反虚列化啊,还过如何实现的。那看一下我们之前学的这个序列化类型还记得吗?Hi do当中序列化类型对应这些,那Java里面对应的需求,呃,对应的这个普通类型啊,啊是这些。哎,那这为什么要用这个hi序列化呢?就是因为hi度的序列化它非常轻,传输起来更高效,效率更高一些,OK,那反过来我们再来看说呀,在企业开发中往往常用的基本类型的需,呃需基本的这个需求化类型不能满足所有的需求,什么意思?比如说上面提到的这些类型。不是能满足企业里面所有的需求,那我给你举个例子,我想对一个B对象。进行序列化,你这里面能不能给我提供一个。
02:01
对吧,那你知道我这个B对象是什么类型吗?不知道那怎么办呢?那我这个对象也得进行这个服务器与服务器之间的传输啊。对吧,哎,那就需要你自己去自定义一个并对象,实现序列化这种接口。就可以了,那实现这个序列化一共需要这么几步,第一步呢,首先你得定一个类,实现这个包接口,这个没毛病吧,对吧,你得按照你的规则去做。好,那第二步是什么呢?哎,正常情况下第二步应该是他。先重写序列化方法,再重写反序列化方法。哎,这两步先写吧,先把这两步写了,因为你看了刚才那个源码里面已经实现了,有这两个方法对吧,一个是它,一个是它,哎把他俩先实现了,那实现了第二步这块有个它。说反虚的化石啊,需要反射调用一个空参构造函数,所以必须有一个空参,这是它系统框架的一个要求,必须得有这么一个空参对象。
03:01
B,那如果啊,有的同学不小心说我这个对象里面传了一个值,那还叫空参对象吗?不叫,那你就得放两个构造啊,一个是空参的,一个是有参的啊,这地方要小心一下啊。行,那这是前四步搞定,那第五步说要注意反序列化的顺序,和序列化的顺序要求完全一致。这个怎么理解?看好啊,我盯一下。这地方。这是序列化的一个顺序,对吧?哎,那下面这个呢,是反序列化的一个顺序。不知道你能不能看清,一个呢是序列化,一个是反序列化。句的话里面我们写的是up flow down flow some floor,那反序的话呢,读的首先读的up flow down flow some floor什么意思呢?给你发这张图了,这张图。哎,上面是去的话,这是反去的话,对吧,写上。
04:00
序列化。反序的话。好,怎么理解呢?你看这里面啊,我首先传输的是将这个up好了。Up flow向这个对方发对吧,哎,我先这么发,发完他之后我发谁呀,我说我发的是这个当flow。然后我再发送对应的some flow是这样发的吧,哎,发,那你发过来之后谁来接呢,谁先接。我接收到的是谁?哎,我先介绍到的是唐。对吧,哎,介绍它,然后我又接收到的是你第二个传输过来的。第三个传输过来的。你看不就这个意思吗?哎,写的时候呢,是先写它,写它写它收的时候呢,哎还是仍然是我先收它,再收它,再说它,哎所以说这里面说呀,序列化顺序和反序列化顺序呢,要求一致。
05:07
OK啊,要想把结果显示在文件中,需要重写凸始进啊,啥意思呢?比如说这块你要想正常的一个打印,哎,那我们需要把它进行一个突出性,因为默认呢,传输过来的是一个地址值。那你要把地址里面的数据打印出来,你需要把它突使进转换一下,那后续呢,我们要进行更,就说把这个结果再进行作为下一个map,就是输入的时候,我们一般呢,是中间用这个T包T啊这个杠T进行一个分开,方便后续一个处理。啊,这是这块啊,那再往下后面还有一个说,如果需要将自定义的B放在这个key中,还需要实现comparable接口,啥意思呢?哎,我们麦阶段啊。这样写吧。嗯。给大家说一下。我们在map阶段。
06:00
它里面有一对KVKV。然后KV对吧,哎,KKY6。那么这一对KY6截一下。这对KY6,记住这里面的K啊,它默认这个hi框架是对它进行一个排序的。默认对这个K进行排序,你这里面的K必须得能够支持排序。否则的话,直接抛异常了,直接就错了。啊,那你这个并对象如果说是放在这个key中传输,那就需要实现一个comparable接口,也是得可以比较能够进行排序。那如果你放在这个value中,那就不需要啊,这些都不需要,是这个意思啊行嗯,那这里面给大家看一下啊,看一下我们这个,我们当时这个key里面是test的,对吧?T test类型也就类似于这种实质类型,那你看一看它支不支持排序。
07:02
Shift shift test。然后包含找hadoop包的啊。是这个吧,哎,这个进来进来之后,你看当前这个test呢,它属于开度包下。它实现了一个writeable comparable接口,那它又是什么呢?点开,点开之后你会发现它实现了一个right接口,那right包接口就是我们刚才的序列化和反序列化的一个方法,那再来一个compare包接口。对吧,这仍然是一个接口,那在这里面要重写它的compare to方法进行一个比较,那看这是谁的。对吧,哎,这个比较啊,它其实是一个Java里面对应的API。嗯,是这样的哈,所以说这个默认的基本类型都具备这种比较的这种方式,所以说它才能够放在这个K的传输位置上,那如果后续我们这个并对象需要放在这个位置的话,那我们也需要实现它的compareable接口,让它能够支持对应的一个排序。
08:09
啊,那这就是这个,嗯,自定义。并对象实现系统化啊,接口的相关的一个步骤和流程啊。
我来说两句