00:00
哎,这张呢,最后一个流呢,叫随机存取文件流,诶随机存取文件流这个呢,是咱们中文的一个翻译啊,哎,那我们对应的这个类的话呢,叫r X accessl啊rhythm accessl啊,这个RHYTHM呢,翻译成叫随机了,实际上呢,我感觉翻译的不是特别好啊,但是大家呢都这样叫了随机呢,感觉就是呃可呃就很乱了,一会这样一会那样那样是吧,其实呢,翻译成个任意可能更好一点啊,就任意的access啊,就是可以这个任意的进入啊,Access呢,有时候也理解成是个通道了哈,就是可进去可出来,这是一种任意的啊,这个它调成一个RHYM了哈,随机的完成其实不是想表述随机的过随机的意思啊,是一个可进去可出来的一个意思,那么通过这样的一个名字呢,我们能够感受到的就是这个类呢,它比较特别,首先的话呢,我们通过这个后缀,你是没有办法分辨出来它是一个输入流还是输出流的。啊,就像你看到一个人呢,你通过他的一些外观特征,你是看不出来他是男的或者是女的的是吧?啊,那么特别之处呢,就是这个类的话呢,看不出来啊,我们想说的是呢,它既可以作为一个输入流啊,也可以作为一个输出流出现啊,这就是它的特别之处啊,CTRLC我们看一下这个API。
01:16
哎,放进来,然后呢,进来我们看到RXFL这个类的话呢,不像其他的一些流,我们是继承为现有的四个基类流的某一个是吧,它呢是直接继承于我们的object啊,直接继承我们的跟这四个这个抽象积类呢,没有任何关系了啊,这是其一啊,那其二的话呢,我们会看到这个类或者叫这个流,它呢实现了一些接口,其中呢,有一个叫做data input,还有一个呢叫data output,说明呢,这个流既可以呢输入又可以输出。这呢就是它的特别之处啊,你可以夸张点想象就像个人一样啊,这个人的话呢,咱们通过这个,呃,这个累的话叫互缀了啊,通过人的一些外貌特征,你知道啊,他是男的或者女的,那现在的话呢,说这个瘤啊,如果是一个人的话呢,他就是一个双性的了,成是吧?哎,既可以是男的,又可以是女的一样啊比较特别的一个流叫rhythm access file,那关于他的这个特别之处呢,这是我们提到的第一个点啊,那另外一个特别之处呢,就是他在写文件的时候,咱们在复习的时候呢,稍微提了一下,他在写文件的时候呢,哎,如果呢,这个文件不存在,我们呢,可以去帮你创建这个文件,这和其他的流是一样的,那如果说这个呃文件呢,存在了,存在的话呢,里边呢,已经有一些数据了,我们再通过这个流呢,去写数据的时候,发现它会对原有文件中的内容呢,从头开始进行一个覆盖,那这呢是相较于其他流的一些特别之处,那它主要呢就是这样两个。
02:53
特别的点啊,那我们通过这个代码呢,来关于它的使用呢,描述一下,那这个流的话呢,呃,这个相较于咱们讲的这个转换流或者是缓冲流啊来讲,这个重要性呢,就差一些。
03:08
啊,RM这个也比较长,CE file它的一个使用。哎,这个的使用啊,首先第一个点呢,我们说这个类的话呢,它是直接继承一个object。哎,直接继承于哎,Java点哎long包下的哎,Object的这个类,哎,而不是继承于咱们的,哎那四个抽象机类了啊同时的话呢,我们说它去,它实现了我们的两个接口,呃,叫做data input和data output。哎,Output这个接口啊,通过这儿呢,我们能看到就是它呢,既可以作为一个输入流,又可以作为一个输出流啊。
04:01
哎,作为一个输入流啊,说又可以,哎,作为一个输出流。哎,这呢,我们就相当于你再去实现一个输入输出的时候呢,就用不着用两个类了啊,用这一个类就行啊,用一个类可以,但是呢,你注意还得去造两个对象啊啊,其中一个对象呢,让它表示的叫输入,另外一个对象呢,让它表示的是输出,你别拿着这一根管道在这,呃,输入的同时有输出啊同一个类,但是呢不是一个对象啊好,这是我们说的这个点,这呢是相较于其他的这些流的区别之处啊,另外一个区别之处呢,就是我们说到这个写出内容的时候啊,这个咱们一个一个来先把这个事呢描述一下,这呢咱们就可以写一个例子。哎,TEST1好,那首先啊,我们呢,需要去实例化咱们RXSL这样的一个流啊,或者这个类啊RAF1,哎,New一个啊,一个RHYTHMXL,然后呢,小括号这里边ctrl out斜杠,哎需要呢,传入的,它呢,不需要我们去传入一个什么file input呀,Output呀,不用传这个了啊,直接呢让我们传一个string性的name,就是我们的文件名,你看传文件名也行,或者你传个file也行啊都可以啊,咱们呢,呃,写一个file吧,File这块呢,就相当于是你要读进的这个,呃,比如说我们这呢,是想让它作为输入流出现,那就是读进来的你这个文件的位置。
05:30
行,那文件位置这个咱们比如说还拿昨天的一个图片来说啊,我们CTRLC一下,哎,我放在D10这个model下,CTRLV啊过来了啊,然后把它呢CTRLC一下,然后我们就放到这了,这呢是我们这个叫参数L1逗号一下,它还有一个参数。那ctrl alt斜杠,还有这个参数的话呢,它叫一个mode mode模式的意思,那这块呢怎么写,看一下我们这个PPT。叫mode说创建random access file这个类的实例的时候呢,需要指定一个mode参数,该参数指定random access file的访问模式,就从如下的这四个里边去选择一个就可以了。
06:11
啊,这个在我们在在我们的这个这个API当中呢,其实也有说到这个事啊,点开啊,这不也提到这四个参数啊,这moded的话,这四种情况啊,这是我们的英文表述,那我们来看这个中文的啊,说这个二二呢就是read,就是呢以只读的方式打开。也就是说,如果我这呢写一个R,相当于咱们当前这个流,虽然说呢,你既可以是输入输出,但是我指定你的目的是二以后,它就只能读入了,就只能作为一个输入流出现,那还可以呢,写成2W,那就是read和write。啊,RA和RA,呃,既可以读入也可以写出,注意呢,没有一种光有W的啊,呃,你要是想作为一个输出流出现呢,你记着给它写成RW的,那除了这两种之外,还有另外两种RWDRWS啊除了这个读写操作之外呢,它还涉及到关于数据的一个同步啊,RWD可以同步文件内容,Rws呢,文件内容之外呢,还有原数据的一个更新啊这里边呢,你看我这呃稍微写了这样一个区别啊,你关注一下就可以了,这呢我就不多说了,那我们平时要用的多的话呢,主要考虑到就是二和RW啊,这样要多一些啊行,那这块呢,我们把这个对象就生明成是一个R的。
07:32
那它呢,只是表示为一个输入流啊,再造一个这个我写一个叫二啊,这个我们复制成了一个一,它呢叫RW可以去输出的啊,暂且呢,我们先给他去抛一下啊,这个异常啊行,这样的话呢,我们就把这样两个的呃,流的对象呢就创建好了,创建好以后跟前面呢,其实思路一样,我们还接着呢去创建这种字节的。哎,数组。那比如1024啊,然后in它一个啊Lin啊Y物循环RN等于r fe点我们去read到咱们的八当中,哎,返回呢,这个长度不等于负一诶。
08:15
这样,哎,不等于负一呢,我们接着给它写出去2AF2点做一个right,哎,还是跟原来一样,用这样的参数的构造器,呃的方法好,这样的话我们就写出去了,哎,同样的异常al enter,哎,我们还是先抛一下,这呢就是一个读写的过程,哎,完了以后呢,接着去关闭我们这里边这个流,哎,它呢也是个流啊,所以说呢,该关还得关,那就是我们这三步,那这呢,我们说明一下,还得去考虑用track finally。Shift z啊这样。哎,说if啊,RF1.rif,诶不等于no。哎,这样。
09:04
哎,这样啊。那分别呢,再把它吊进去啊。哎,再接着呢,Al做一个check。行,这样的话呢,我们就写完了,其实本身这个代码量没多大,加上以后呢,还挺长哈,嗯,主要呢,核心的还是咱们提到的这样的三个步骤啊,第一步造我们这个流的对象,第二步啊读写过程,第三步关闭流啊这样的三个事儿,好那下边的话呢,我们执行一下啊,当前我们只有这样一个文件啊,点右键我们做一个run。啊,可以了,哎,执行完以后,我们就生成这个文件打开啊,也是OK的,哎,大家呢,你也可以到我们这个磁盘当中看一下它俩文件大小啊,其实呢,都是没问题,看一眼啊。那这呢是我们原来这个文件看属性。新的这个属性啊,这个字节数啊是一样的啊好,那这样的话呢,我们就能体会到,对我们这个文件呢,确实可以实现一个复制,它呢既可以作为一个输入流出现,又可以呢做一个输出流呢出现啊这就搞定了啊,那接着呢,我们说它的另外一个知识点啊,这呢我们就提到关于这个输出的时候啊,对文件的一文件内容的一个覆盖这样的一个事情。
10:29
诶,Test的一个二行对文件内容的一个覆盖,你要想能看到是对内容覆盖啊,这呢,我们还真得整一个文本文件了,这样咱们才可以更清晰的能够看到这个事情,那我还写成一个叫hello.txt吧,那这里边呢,嗯,是文本文件,咱们呢就给它写成字符,字符的话呢,我就用这个abcd啊EFG。ABCDEABCD。啊,EFG啊,HIJKLMNHIJKLMN行,我就写到这了啊,我这样呢,我就写了一些这个字符了,写完以后回过来,我们现在呢,想往这个hello.txt当中呢去写内容,我想往这里边写内容,大家你注意看一下,它是对文件覆盖啊,对文件内容覆盖还是说呢,做一个后边的一个openend的追加等等这样的行为啊,那首先呢,我们去造对象,这个对象呢,只是作为一个输出出现的。
11:32
啊,这个我就借用一下上面这样的一个结构啊,CTRLC。嗯,去new一个啊r access file啊,这个位置我们想写出到这个hello.t里。写入到这里边,然后呢,我们写出嘛,对RW了啊,这个al enter一下啊,我们还给它抛OK这呢我们造完了,哎,造完以后RF一点,我们呢去做一个rightt,写出的话呢,我们可以看到会看到啊它这里边的话呢,呃,需需要传一个BAT的一个数组,那我这里边我就这样写了XYZ正常呢,不行不行,我再让它点叫get一个BAS。
12:11
啊,这样就可以了啊,Al再做一个异常的一个throw啊,这样呢,相当于我就写出了,写出以后关闭,哎,这不就关了吗。就关了啊行,那这块呢,我们先说这个事儿,我这呢先写成个HELLO1,此时这个HELLO1呢是不存在的,我们看一下执行会不会帮我们去造一个文件。首先执行是成功的,这块呢,我们会发现有个hello,一里边呢,就是我们XI。啊,这个呢,跟我们原来相当于是一样的啊,现在我们主要体会的就是我写成hello了,Hello以后已经存在是这个,然后呢,我们现在执行看看到底是什么情况。好了,然后呢,回过来点开啊。
13:02
是不是把我们这个ABC给覆盖掉了,哎,所以说呢,首先如果本文件已经存在,不是对文件的覆盖,如果要是对文件覆盖,这应该就是XYZ。啊,不是对文件覆盖,那么它是它也不是在后边去追加,不是在最后写的啊,它是从我们开头位置呢,对原有文件实现一个覆盖。啊,这个行为我们描述一下啊,咱们呢,写到这个位置哈,说如果咱们的RM XS file,它作为一个输出流出现,哎,作为输哎输出流是啊,这个写出到的这个文件如果不存在啊,则在执行过程中。自动创建。哎,这个跟咱们原来这个行为是一样的啊,那再接着呢,说如果啊,写出到的文件。
14:02
啊,存在存在的话呢,我们说这个则会对原有文件内容。来进行覆盖,而且默认的时候呢,是不是从头覆盖啊,默认情况下啊是从啊头覆盖,那能覆盖多少算多少,那你要是这里边我们呢,写的是XYZ,后来写的特别长,那就把你有的这个数据呢,就全覆盖完了,写的比较短的话呢,那就只覆盖一部分。那就是这样个情况啊。
我来说两句