00:00
行,那么这个流呢,说完以后呢,咱们这一章最后这呢,还提到一个叫NIO2中pass哎,加S的pass和false类的一个使用,这呢咱们做一个介绍啊,首先呢,大家呃知道咱们这一章呢,讲的叫L啊,Input output,然后后续的话呢,你还会见到叫NL,甚至还有A还有b lo,哇,原来这么多L是吧?哎,首先呢,我们先关注下什么叫NIO啊,这个n lo,这个关于这个N的解释呢,其实有两种解释,第一种呢,叫做new IO啊,第二种呢叫non blocking IO,哎,Now blocking呢就是非阻塞的IO。咱们讲的这个IO呢,其实前面都是基都是有阻塞的啊,这个阻塞的事儿呢,咱们通过下一张网络呢,也能够说明啊,咱们后续再说,那么这个NIO在g Java这个1.4的版本的时候呢,就引入了是一套新的API。想用这套API呢,去替换咱们现有的IO这一套API,那为什么要替换呢?就是因为他们有一些不同啊,这个咱们IO的话呢,是基于这个流的啊,这个NIO呢,是基于这个叫缓冲区的啊,它呢可以更加高效的方式呢,实现文件的读写,但是这个NL出来以后呢,写的一般。
01:13
啊,写的一般啊,就是使用起来呢,不是特别的方便啊,所以呢,后来呢,又出来一个NIO2,就是又出来一个新版的这个NIO2呢,是咱们这个JDK7当中发布的,对这个NIO呢,进行了一个极大的扩展啊,增强了对文件处理和文件系统特性的一个支持,所以我们在这个七的版本当中,习惯上呢,就称为叫NIO2。啊,那么随着我们不断的这个这个这个代码编程啊,然后这个NI的话呢,它起的作用呢,就越来越大了,哎,主要是因为呢,刚才提到一个点,它呢是基于这个缓冲区的,哎,能够更高效的方式呢,进行文件的一个读写啊咱们前面呢讲这个IO的时候呢,是基于流的啊,都是用的stream啊数据的话呢,咱们是不是都是用的这种叫字节或者是字符数组啊啊用它呢实现一个数据的一个传输了,那么对于我们这个NL来讲,它那叫面向缓冲区的,它呢会涉及到一个叫做buffer的一个结构,当然本质上来讲,它它也得是数组了啊容器的话呢,外呼不就是数组和列表吗?
02:17
啊,它呢,其实本质上也是一个数组啊,但是只不过呢,它封装为一个buffer了,然后它传输的时候呢,用的不是流了,它用的是下边这个叫channel channel叫通道,这channel这样写,哎,你别写成这个香奈儿了是吧?哎,不是香奈儿哈,Channel通道这个通道的话呢,下边又提到了这样的一些具体的channel,那通过这个呢,我们能看到这个蓝色的叫file channel,咱们可以用来处理本地文件啊,把本地文件呢读进来写出去,哎就可以用它啊这呢是针对于本地的啊,那么还有呢,针对于网络的就是socket的情况,这也是咱们下一章要讲的这个网络编程,诶也可以用这样的几个channel呢去实现。
03:00
啊,这个大家也是了解一下啊,那咱们在这个基础层面呢,就不讲了,等到后面呢,咱们在框架,以至于说在项目中用的时候呢,大家呢,去看我们的框架底层,你会看到这个NI5,哎,到时候的话呢,我们就讲一下这个IO在啊现在呢,没有具体的情境讲的话呢,呃,有点偏重啊,OK,这呢我们就过了,那么刚才提到一个叫NIO2啊,就JDK7,在这个JDK7当中呢,提到了几个新的类,这几个类呢,就叫做pass,还有带S的pass,还有这个files,哎,你看这个files是不是就想到我们的file了,哎,File呢,咱们表示个文件提供了一些方法,那现在又加了一个files,从形式上来看呢,就像一个工具类了。啊,那我们看看这三个类是干什么的啊,说早期呢,咱们这个Java呢,只提供了一个file类,用来访问文件系统,但这个file类的这个功能啊,比较有限。就是咱们讲的那个方法所提供的这个方法呢,性能也不高,而且呢,大多数方法在出错的时候呢,仅返回失败,并不会提供异常信息。
04:05
这个也确实是你像咱们典型的大家呢,去写那个叫rename的时候。就是咱们把这个文件呢,是不是可以重名为一个新的名字啊,那个当时呢,就光给你返回一个false,很多同学呢,就老是false,就很迷糊啊,怎么老false,到底出什么错了,很遗憾没告诉你只是false,哎他你要是说更好一点什么呢?要是false的时候呢,你别告诉我false了,你给我抛一个异常是吧,你异常的名字呢,你写的清晰一点,我是不是一看异常我就知道哪出错了。啊,比如说我们rename的时候呢,要求这个文件不能存在,你要存在了不就错了吗?你报个false我都不知道到底哪出问题了,你要是报一个说FILE2呢,存在了的异常,哎我就知道哦,不应该存在哎就更清晰啊,哎他这呢,就会有类似的这样的很多的情况啊,只返回一个失败,或者返回一个no,也不告诉我们到底出什么事了啊不是特别好,那么NL2呢,为了弥补这种不足,引入了pass接口。
05:03
首先明确这个pass就可以理解为NIO当中提供的一个类,这个类就来替换咱们原有的file。啊,可以看成pass是原有file的一个升级版本啊,实际引用的资源也可以不存在file,当时也是说啊可以不存在,以前呢,咱们如果呢,表示一个文件这样写,现在呢,表示个文件可以这样写。那这呢,里边又涉及到带S的pass,相当于如何去获取我们的pass实例啊,这个不是new的啊,啊怎么获取呢,就引入了我们这个带S的pass了。带S这个pass呢,其实它是一个类了啊,是一个,呃,也算是个工具类,它的目的呢,就是用来创建我们pass的对象了,哎,它这里边有这个get的方法,哎,我们就能够获取这个它的实例,而这个是一个实例,用来替换咱们原有的file,哎,就这样啊,那原有file呢,有些方法,那就意味着咱们pass呢,是不是也会有一些方法。
06:01
哎,这就是它里边的常用方法。啊,这呢是哎替换我们file的这个pass的常用方法,那么除此之外还提供了另外一个类叫做files,这个files的话呢,你也可以看成是我们操作文件或目录的一个工具类了,哎,这个工具类里边啊,又多了一些关于文件操作的方法,整个这个方法的话呢,不少我就不在这块去说了,咱目前讲完以后呢,大家也不会马上应用起来,还是等以后到框架的层面,咱们呢底层啊,这个框架呢,都会对这个NIO等进行一个封装,到那个时候呢,我们用到哪个方法了,咱们再去看就可以了,啊这块的话呢,有的同学可能有的想测试,我就把这个方法的测试呢,都这个代码呢都写好了啊,咱就直接呢就粘过来就行。哎,我就不去写了,像这个pass。关于它实例化呢,就刚才提到这两个方法啊,这个呢,UI咱们还没有讲,所以你就光看第一个就行,哎这呢,我们通过这个带S的pass呢去get的方式,哎,这不就获取到了啊,那么下边呢,是关于它的方法测试,哎,Pass当中,比如说你这个文件是不是以指定的某个这个这个字符串开始的,你看是不是它开始的,是不是它结尾的啊,它是不是一个绝对路径啊,又多了很多的功能,包括呢,它还可以跟我们以前的file呢进行一个转换。
07:26
原来的这个file里边有个方法叫to pass。我们就可以把它转换成是个pass,那我们这个pass呢,你改成叫to fail啊,又可以把它转换成是个fail,哎,能相互转换啊,哎,这是它的一些这个方法,那然后呢,我们又提到这个叫files这样的操作文件或文件目录的一个工具类,诶这里边呢,又提供了很多的一些功能。啊,有兴趣的话呢,大家一下来看一下就可以了啊,这呢我就不展开去说明,行,这呢是提到一下我们这个IO啊,以及NIO2当中的这样的三个类啊。
我来说两句