00:00
好,那接下来我们来看第五个新特性啊,叫重新实现旧版的套阶字的API,这个呢,也是我们官方JAVA13的呃,五个GP当中的啊,这个咱们之前也看过了啊,五个官方提供的GDP当中的最后一个了啊,就是关于我们这个呃,重新实现啊,这个我们旧版的这个socket套件字啊,套件字的API,这呢也是我们关于API层面的一个变化的新特性,这个套件字呢,就叫做socket,这个大家进行Java实现网络编程的话呢,这个肯定清楚啊,就是socket编程,那么这个socket的话呢,实际上在我们Java1.0的时候呢,就引入了啊,你看我们这个socket,我们看一下啊,Ctrl shift t socket诶在1.0的时候呢,我们就引入了这样的一个呃接口了,那么相当于我们现在呢,就是把这个socket,一个是socket本身,还有一个呢叫server socket,这两个的底层实现呢,我们做了一个更新啊,是这个意思,那么原有的这个socket或者叫server socket底层实现有什么问题呢?这块呢提到了三个点啊,第一个。
01:00
它的底层实现呢,混合了Java和C的代码,维护呢和调试都会比较痛苦啊,这个一说这个事呢,就呃提到了我们一个呢,是叫Java的一个内存结构啊,在运行时数据区当中,我们知道呢,呃,有这个虚拟站,呃本地方法站,还有呢,就是这个堆空间,嗯,还有呢叫PC寄存器,呃还有我们这个方法区啊这样的几个部分,其中这块呢,提到一个叫本地方法站,哎,我们其实相当于是实现对本地方法的一个调用啊,提到本地方法了,NATIVET5的方法我们知道呢,就是呃C的这个代码了,咱们知道这个Java在呃刚出来的时候呢,呃,C语言横行天下是吧?啊这时候呢,Java要想有更好的发展需要呢,去融合C的这个代码,包括C的这个生态呢,比较好了,所以Java呢,在最初的时候呢,呃,也融合了C的一些比较好的结构啊,当然现在呢,已经今非昔比了啊,Java呢是现在牢牢占据的语言排行榜的第一位。啊,Java语言的这个,呃,首先呢,这个应用的场景很多,那其次的话呢,Java里边这个Java虚拟机也被其他的这个各种语言这个所使用啊,也是相当于现在Java呢,是一个老大的地位是吧,包括呢,我们另外的一门前端的技术叫Java script啊,这个GS呢,这个名字里边都带了个Java,就在尽可能的往Java这块去靠啊,包括呢JS当中,呃,这个流程控制啊,Break呀,Return啊等等这些结构,包括运算符的使用,你发现跟Java都是一样的,呃,所以这时候JA瓦呢,其实是一个霸主地位啊,就有点点像这个咱们人类社会里边这个美国一样啊,美国现在比较强大了,所以呢,世界上很多国家呢,都愿意当美国的小弟是吧。
02:40
啊,就是以前呢,看一个说法啊,说我们怎么去衡量一个国家的强大,就是它,呃,一个指标就是它实际的疆土面积跟他实际的影响力的范围啊,比如像美国,它的疆土面积呢,其实跟中国的这个国土面积差不多,但实际上它的影响力呢,是遍及全球,呃,我们知道美国其实在很多国家呢,都有驻军是吧,而且在很多这个地区的话呢,这个。
03:05
这个都是他这个这个独立的一个一个,呃,军事管辖范围之内了啊,包括前段时间他还去想买这个叫什么格陵兰岛是吧?啊是这样的情况啊,呃,那你像中国这样啊,虽然说我们现在中国的这个体量,经济体量很大啊,这个具有这个大国风范啊,这个呢都是好的方面,但是另外一方面我们也看到了中国的国土面积啊,这个960万平方公里,但是实际上我们可控制的面积呢,是要小于这个面积的,比如说像台湾是吧,比如说像南海问题啊,所以说中国现在其实谈不上强大啊,一个国家强大就是它实际影响范围要大于它的实际疆土的范围,那它就是强大的。啊,那现在呢,世界上其实唯一的这个霸权国家呢,就是美国是吧?是这样啊行,那么我们再回过来说呢,这个在JDK1.0的时候呢,这时候Java呢,其实还比较薄弱,薄弱一些啊呃,所以它关于socket和serve socket实现呢,底层融合了这个C代码,那这个我们进行调试和维护的时候呢,就比较痛苦了,呃,那第二点呢,就是时间内使用了这个线程站啊,作为这个IO的一个缓冲,导致呢,在某些情况下呢,我们还需要去增加这个线程站的大小啊,关于内存方面的一个情况啊,然后下一个呢,是支持异步的关闭。
04:17
啊呃,这个操纵呢,还是调用了本地的一个数据结构来实现的啊,提到了一个本地的就是跟这个C相关的了,啊呃,就是还是有这个调试啊,维护啊,不太方便,存在的一些潜在的不确定性,那包括的话呢,这块还会有这个相应的一些并发问题等等,那这块呢,都是需要我们要解决的问题,那针对于这个情况呢,我们去提供新的关于socket的底层实现啊,新的实现我们使用了叫n IO socket IO来替换啊,1.0当中提到了叫I plan socket input。啊,实现了一个替换啊,这块我们看到叫NIO了,所以我们底层这个代码呢,就跟我们这个叫非阻塞式的这个IO就相关了,这个NI呢,我们这个N翻译成叫non blocking,非阻塞式的可以也可以翻译成叫new I啊是相较于咱们原来的这个IO来说的啊,那我们看一下,首先呢,说它便于调试和维护啊,因为我们这块呢,把这个C的代码呢,做了一个剥离啊呃,与newl或者叫NL使用相同的这个JDK的内部结构啊,然后不再需要本地这个代码了,呃,这个NL当中呢,我们这个加载内存的时候呢,其实可以使用这个本地的内存了哈,加载速度呢,其实也是比较快的。
05:25
啊另外呢,他与现有的这个缓冲区呃缓存机制呢集中在一起,不再需要为IO呢使用线程站了,这个大家呢,如果写过这个NIO或者用过这个ni的话呢,呃,应该知道这个NL呢是基于啊叫channel啊,基于这个通道的啊,然后呢,它需要用到这个叫缓冲区啊相当于呢,诶我们是使用了NL以后呢,这个缓冲区呢也是啊,跟这个NIO呢进行这个同步了啊呃,接下来呢,提到了我们使用这个叫GOC了啊,使用GOC锁在保证数据安全情况下呢,我们这个还可以增强这个并发能力啊,前面呢提到了说这个并发呢,可能会存在相关的一些问题啊哎,同时呢,我们不再用这个叫size了,这个并发能力就相对差一些啊嗯,再者的话呢,就是我们原来的实现呢,叫诶plan socket in,我们在新版的底层API当中,并没有说把原来的这个API呢给它完全干掉,而是呢,是做了一个选择,就是你仍然可以去使用原来的这个API啊,也可以使用我们这个新的API。
06:22
啊,那怎么做一个区分呢?哎,我们来看一下啊,在咱们这个嗯,Socket里边啊,这个socket里边我们主要呢,是看它的一个具体的实现了啊ctrl shift t,我们来看一下,这个叫socket。那这是我们net包下的这样的一个具体的抽象类了啊呃,这个呢,是咱们JAVA13这个版本当中这个API的一个底层实现啊,呃,我们看到呢,它上来定义了一个这样的一个叫全局常量啊,这个全局常量的这个值呢,是由我们下边这个方法来确定的,确定好这个值以后,我们接下来呢,去创建一个啊平台的socket的一个具体实例的时候呢,呃,这个就是我们要返回的具体的socket底层实例了,这个实例的值到底是谁呢?呃,主要取决于我们这样的一个全局常量。
07:09
啊,那如果你这个权益常量返回的是一个处,我们仍然返回的是一个原有的叫plan socket in input,就是我们旧版的这个socket底层事件啊,那如果说你要是个force的话,就返回这个新版的叫NIO的一个socket I input,那这个值取决于什么呢?诶,我们看这啊,它的值取于我们这个方法,这个方法的话看一下,诶它呢,会去我们相应的这个Java点,呃,jdk.net这样的一个结构当中去调用一下,返回相应的一个字符串,诶判断一下我们相应的底层这个配置当中是否配置了这个,哎,Plan socket in input,那如果要是你返回这个字符串是非空的,并且呢,诶,你也不是force的话,这个时候我们仍然创建原有的,就相当于这就个处了啊,创建原有的这个版本的底层实现啊,如果你要是个force,我们就创建这个新版的。
08:01
啊是这样啊,那如果我们要是使用新码的话呢,就能实现这样的一个优良特性。啊,真的属于一个呃,API层面的一个变化啊,这个大家清楚一下就行啊。
我来说两句