00:00
那接下来我们提到另外一个瘤叫rhthmces file,那首先呢,我们也把人家看成是个瘤,虽然说长得呢不太像瘤叫rhythmces file啊,这个中文翻译呢,我们说叫随机存取文件流,就是完全的值译啊,RHY叫随机了啊,Access就是可以进可以出啊,就可以存可以取啊,叫存取文件六,那其实这个随机我们说不是特别好啊,随机给人感觉就是这一下那一下取一个随机数那种感觉,其实这个你可以应该叫任意是吧,任意存取,想存就存,想取就取是都可以啊,应该是这个意思,那随机存取文件流呢,我们讲到的时候呢,提到它好几个特点啊,主要呢,就是这样的四个事儿啊,这样四个事儿,呃,最直观的,大家一提到这个流,第一印象是什么呀?对,哎,第一印象应该是可读可写,哎,这也是他本身这个rhythm access他想描述的事,哎,可读可写啊,哎为。
01:00
为什么它既可读又可写呢?还是因为它实现了这样两个接口啊,既可写啊,既可这个读进来,又可以写出去这样的原因啊,那它既可读又可写,其实也就决定了它不可能是继承于咱们现有的四个抽象基类中的任何一个,因为张二中继承不可能是双继承了,是吧,你不可能继承一个流,又继承另外一个流,这不行,只能继承一个,那他就必须从四个里边,你要让他选一个的话呢,选了这个那就是输入了啊,选了某个就成输出了,哎,它不可能是继承现有的这四个了,所以呢,它比较特别啊,直接继承一个object啊,这是这个事儿,然后接下来的话呢,它这个区别啊,就涉及到呢,我们写出时候的这个文件啊,不存在呢,自动创建跟原来一样,跟别的流由一样啊,写出去的这文件要存在了,这个时候有区别了,会对原文件内容进行覆盖,它还不是说像原来其他的一些构造器输出。
02:00
出的时候呢,我们在参数二逗号一下,整个错误表示呢,是openend往后添加了,哎,它这个也不是啊,哎,它这个就是从头开始文件内容进行覆盖啊,那我们呢,也可以通过这个相关的一些操作呢,实现让它有一个插入的效果,这个主要原因呢,是因为这个随机存取文件里边,它有个比较好的方法,是不是叫seek方法,哎,我们可以指定一个in型的叫position是吧?哎,指定它的某一个位置,指定的这个指针就定位到这儿开始进行读写啊,这个原因造成的。行,这呢叫随机存取文件流啊,它的一个这个东西粘到这啊,哎,这是它的一个具体的使用说明,哎,上面呢,就是关于它的一个流怎么写啊,R do啊X access file,好,下边呢,涉及到一个典型代码,那第一个典型代码呢,我们就提到了一个复制操作,那写了这样的一个代码啊,CTRLC一下。那通过这里边我们看到它呢,既充当了一个叫输入流,诶,又充当了一个叫输出流啊,这里边呢,提到了它这个模式啊,这个大家稍微关注一下,这两个呢,我们用的比较多一些,那如果在这个多线程的情形下,多线程的情形下,涉及到这个数据共享的情况,我们还涉及到一个同步的问题,那还会有其他的提到的这个两个啊,RWSRWD啊这样的不同的模式,那这个咱们就不去演示了,就啊那下边有一些简单的介绍,那下面呢可以看一看,OK,这呢是典型代码一,点型代码二,我们实现了一个插入的效果。
03:39
诶CTRLC一下,诶这是一个插入,诶插入的时候呢,我们这就相当于是其实就是一个算一个小算法也行,找到这个位置,把数据呢后边的数据给读出来,在呢你诶回回调到最初的这个位置上,写入内容以后,再接着把你哎缓存起来的数据呢再写出去,只能这样啊。
04:01
好,这呢就是咱们说的这个RMSSL啊,这个呢重要性呢就差一些了,哎,基本上掌握到这个程度呢就OK了啊,那在后边呢,我们提到一个NIO,哎这个NIO的话呢,咱们没有具体展开去讲啊,这要讲的话又得是一天多的这个时间,而且讲完以后呢,大家也没有直接的使用情境,呃,你可能也很容易忘啊呃,另外一个点呢,是因为真正开发当中,真正开发当中呢,其实咱们说IO也好,NIO也好,呃,有的时候呢,我们需要自己写一下啊,造一个流,其实很多的情下,或者很多的情况下,或者绝大部分情况呢,都是用一些现成的第三方包了。啊,这里边就提到一个很正常一个点啊,就是一旦开发中比较常用的,大家老是写,老是写别人就想说要不都别写了,咱们定一个规范得了,定义规范以后呢,封装起来,大家是要用谁就从里边拿得了,哎所以说呢,只要是常用的呢,你都会去考虑有第三方的一些炸包或者开源的一些框架可以去用的啊,不常用的或者一些小的方法,一调集完了,我们才会自己去写一下,所以这个NI啊,我们就没有给大家去大范围去讲这些这个这个API了啊,这个具体的传输这个思想呢,通过这个IO呢,大家已经体会到了,哎这些就够了啊,就够了,也练一练,那么至少什么是NL的话呢,你先得知道这个事儿啊,所以我们在这呢,就给大家稍微讲解了一下。
05:27
首先来看一下咱们这个PPT。哎,这个NIO,这个首先这个N它的一个解释呢,这两个都可以啊,叫N,嗯,New IO也行,叫non blocking IO也行,Non blocking icho就相较于咱们这个IOIO相当于是一个阻塞式的,什么叫阻塞式?哎,大家呢,你看我们昨天讲那个网络的时候,上面呢,我们发个图片发给我们的这个服务器段,这个服务器段计完以后呢,他要给我们这个反馈,默认情况下呢,你看这个readid方法它就结束不了是吧,他就一直在等着我们这个用户再去输入啊,这就叫个阻塞式啊,还可以取谁呢?诶咱们以前不是用这个scanner用的比较多嘛,Scanner的时候呢,这不也叫system.in嘛,现在这不也是个输入流吗?哎,那这个流的时候呢,大家一运行,你发现说请输入用户的名称,呃,你运行这个程序,你发现呢,这个请输入用户名称,完了以后冒号光标就等在这儿,是不是你去输入了。
06:24
他没有说呢,哎这块你没输他就来走下边了,哎这呢其实就是阻塞式的意思啊,哎理解这个概念就可以了,好嗯,这呢是说它这个NL呢,一定程度上可以去替换我们的IO,哎这提到这个问题,嗯,虽然这么讲啊,但是呢,实际开发当中,我们看到很多时候呢,也会还会用原来这个L,只有新的一些框架的底层呢,诶它会做一些修改啊,去调整成这个NL,这个NL的话呢,在我们JDK这个四的版本就提出来了,但是呢,提出来以后呢,一开始引入的不是特别好,所以大家呢,基本上也还没有怎么去用啊,JDK7的时候呢,对这个L呢,又进行了一个优化啊,咱们一个来,刚才这是第一个事儿,第二是呢,哎,它跟原来的IO呢,有同样的作用和目的啊,使用方式呢变了,哎,它呢是面向缓冲区的啊,基于这个通道的啊,能更高效的方止读写啊,把这个我们都拿过来啊。
07:25
这样的几个点啊描述一下,其实这块呢,你看到说,哎呀这个还挺不一样的啊,它虽然说叫基于缓冲区的啊,说白了你想你数据传输传输一下呢,可能就要传传这个好些,咱们原来呢,用的是BA数组或者叉形数组,它这个缓冲区呢,叫buffer,里边封装的其实还是数组啊,装数据不就不不就那么几个东西嘛啊,就是名变了啊,封装了一下而已,就像我们说讲release一样,说release啊去替换数组啊,说的很高大上,你看里层不还是数组吗?不过就是你自己呢,进行了一个自动扩容而已是吧,插入删除这个操作呢,你里边给写好而已啊,本质上还是数组行这个呢是提到它,然后另外呢,提到一个概念叫做NIO2啊。
08:13
啊,这个呢,就是基于我们1.4的这个NIO,哎七的时候呢,对它又进行了一些优化啊,就称作叫NIO2了啊像这个概念的话呢,诶说能知道这就可以了啊。14改成这个字体吧,这样啊。行,哎,这样的几个点啊,大家稍微熟悉一下,了解一下就行。后边的话呢,咱们讲这个这个框架的时候,诶,框架的这个源码当中,这个到时候老师呢会带着大家去看啊,这个底层源码里边呢,会涉及到这个叫NIO啊行到那个时候呢,我们就关注一下底层源码这NIO它是怎么去具体去实施的,完成我们的功能的就行啊,不用去深究,我们现在去吭哧吭哧写这个这个这个代码了就啊嗯,在后边呢,我们稍微呢提到了几个这个类啊嗯,在NL2当中,也就我们这个JDK7当中啊,它其实呢是提供了三个,一个呢叫pass,还有一个呢是带S的pass,还有我们这个叫file啊带S这pass主要是用来给它实例化的,那首先第一个提到这个那个pass它的说明,诶简单来说就是使用这个pass呢去替换啊,咱们原有的这个,诶这个file类啊,嗯,主要原因是什么呢?一方面啊,就这里边的功能少一些,这里边呢,提供的方法就更多了,这是其一,其二的话呢,就是这个呢,提到有一些方法呢,它只会返回false,也不给我们报异常不。
09:47
它到底出什么问题了,哎这里边pass呢,说很多时候呢,它不会给你返回force,直接给你抛异常,那通过异常呢,我们就知道哦,到底是什么什么样的异常,通过异常的那个名称,包括呢,它里边又包含的那个message,我就知道呢,是哪块出问题了啊就是更好一些啊简单来说就是它那下一个呢,叫如何实例化啊,怎么去这个造对象,造对象的话呢,我们说提到两个方法,哎这两个方法主点主要的话呢,就是我们这个带S的pass当中提供的,嗯,所以我们这呢,诶就知道这个事就行。
10:22
这个大家就了解一下就可以了啊,具体的这个常用方法有哪些啊,你不是说你比这个files呃,比这个file强大吗?啊这里边就提到了一些方法,哎,就这样子的啊,哎,所以说这里边这个方法呢,大家这个我们也没有带着大家去练了啊基本上你看到这个方法名的时候呢,也大体上也知道它方法是做什么了,就我们所谓的这叫建明之意了,那我把这个代码呢给大家了,接下来呢,诶有兴趣的你就稍微这个从上往下呢过一下就OK啊就行了,哎在后边呢,提到一个叫files叫工具类,哎它的作用呢,就像咱们讲的数组有个a race啊,集合有一个collections一样啊,它的作用就是来哎操作文件或文件目录的啊一个工具类啊,啊,就是这样个工具类,好,那它这里边的常用方法,PPT里边我们又给了这个两波方法。
11:19
那这呢是他的这个其中的一波,那这是这个一波,哎,然后呢,还有一波,哎这样子啊,那么这些方法当中,你看到下边这啊下边呢,我们这提到这个叫channel了,这个呢也叫做这个哎这个这个啊也涉及到这个叫pass了,就这呢都是跟我们这个新的像这个channel典型的就是我们NI里边啊,要想这个呃传输数据,咱们在IO里边用的叫stream流,那在我们的NIO里边呢,它叫通道。哎,通过这个通道呢,进行一个传输,就替换原来那个流那个那个概念的啊,哎,这呢,我们也不主要的去写了,还是他的这个思想跟我们说的IO呢是类似的,所以大家呢,其实掌握这个数据传输的思想以后啊,就是我们说的标准的那几步,后续呢,使用这个NIO也好,还有其他的IO也好啊直接呢,都是这样的一个思路啊就可以了啊行,这就过了,哎,然后呢,咱们讲这一章的时候呢,这也提到了,实际开发当中,咱们都会用一些开源的一些炸包了啊哎,我们只拿这个稍微给大家演示了一下,后边我们在项目当中用到的时候呢,就不直接自己去洗了,直接呢我们加载这个。
12:32
这个扎包哎,直接呢,用里边的方法就行,那方法的底层呢,就是我们讲到这个IO这样的一些这个原理啊,当然也不排除他会用这个NIO行这呢就过了。
我来说两句