00:00
File reader writer,咱们呢就说到这了,使用这两个流,咱们呢去来操作这个,呃,这个文本数据就是hello啊,这块发现呢,我们用file reader write呢去实现一个非文本数据的一个复制,这呢,比如说是一个图片,发现呢,虽然说图片呢是复制成功了,也没有报错,但实际上呢是有问题的啊,因为呢,咱们本质上底层就是一个二进制的数据了,你现在呢,非得要把它转化成一个叉,这个是显然不对的,不OK,那现在呢,我们要想实现一个图片,包括视频他们的一个复制,咱就得需要用,用到另外两个流,就是呢叫处理字节的流,这呢就提到最基本的两个处理字节的流是file input stream file outut stream。好,下边呢,我们就来说一下这两个流,在这我们去新建一个class啊,File input这呢,因为太长了啊,我就这样简写了input output,然后呢,Stream的一个测试,这样就通过,这个名字呢,大概你能看到这个。
01:00
意思啊,这呢,主要我们是来去测试file input stream和file,哎,Output stream它的一个使用行,那这块的话呢,其实使用的这个套路跟咱们讲的file reader writer呢,其其实是一样的啊,那咱们先简单的来体会一下,叫file input stream关于这个字节的一个输入流的一个使用。哎,Test file input,诶,Stream行,那这块的话呢,我们去使用这个字节流来处理一个文件,那这个文件处理谁呢?咱们还希望这个文件呢,尽可能的能够看到你处理这个过程啊,或者是效果,那这块呢,我们不妨啊,咱们先试着用file input stream来操作一下这个hello.txt。哎,正常来讲,这实际上是一个文本数据了,我们看一下用这个字节来处理这个文本数据有没有问题,哎,首先呢,我们造一个这个file,因一个file al enter,导入一下我们这个IO下的file,然后接着呢,把我们这个文件呢给它啊路径CTRLCTRLV转过来,这就是咱们说的这个第一步了,套路呢是一样的啊,这个我就在这儿,呃,简单写一下啊,这个呢,我就直接写成叫呃,造文件是吧,造文件第二步造流,然后呢叫file,哎,Input stream FS等于new一个啊file input stream,把我这个file呢扔进去,这呢又有一层out啊enter,我们先呢throw一下啊,造流,然后第三步读数据。
02:45
读数据,数据呢可能也有很多,这个呢,跟咱们前面一样,我们呢去造一个数组,数组,因为呢,我们这是一个字节流,所以自然而然的我们就造一个字节的数组,哎,New一个BAT,不妨呢,我这也先写的短一点,就是五,然后in一个L音,它呢来记录。
03:05
每次这个读取的这个数据,或者叫字节的这个个数啊,好,接着呢,Y号循环LN等于F fi.read到咱们这个B当中,这样啊,然后当你这个返回的LAS不是负一时,说明呢就有数据,有数据的话呢,咱们现在想干什么事呢?我也想把它展示到咱们这个页面上,就是sits out一下啊,那sit out的话呢,这是一个数组,哎,咱们也可以这样做啊,Stringnu,一个string,哎,然后string呢,咱们把这个buffer呢放进去,讲过这个构造器,哎这块呢,同时要注意对调的是这个三个参数的构造器,诶此时呢,我们再做一个c out。这块呢,就诶不让它这个换行了,就啊行,那通过这样一个循环,我们就把这个文件当中的数据呢,都以这种字节这样方式呢,就读进来了,啊这呢有一个异常,也暂时呢,我们先去Rose一下,这呢就是整个读的过程,这个读的过程呢,其实大家把这个BA换成叉。
04:14
其实就是咱们上午讲的这个字符的操作,哎,然后第四步关闭资源,诶此时呢,就只有一个FS点做一个close OK搞定,还是这四步,整个咱们今天讲这一章呢,其实都是这几步啊,都是这几步,那这块呢,我们不适合呢,用so来处理,把它呢删掉,哎整个呢从这到这包一下out shift z。看try catch finally finally if,它不等于no。把我们这个呢扔进去。在这呢,再来一个拆开式好搞定,这呢我就写完了,那写完以后,现在我们跑一下,大家来看一下我们用字节去处理这个hello.tt会不会出现乱码啥的。
05:08
按说会是吧,一直行你发现诶没问题是吧,没问题哈,这个为啥没问题了呢?哎,这个呢,其实是因为什么呢?咱们这个,呃,咱们这其实是用的这个UTF杠八了哈,呃,UTF杠八啊也好,还是说这个呃,JDK也好,这个我们这里边存的这个像abcd这都是属于一个具体的字符,属于这个英文的字符,这英文的一个字符呢,我们在UCF杠八也好,在JBK也好里边呢,这一个字符其实还是用的一个字节存的。或者这个呢,大家如果还不清楚,呃,咱们呢,不是一开始讲过这个阿次玛是吧,这个阿次玛当中呢,是不是一个呃一个一个字符阿次玛呢,我们说是有八个这个位去存八个V呢,其实256种情况,但是其其实他没有用这么这么多种情况哈,用了这个128,哎说白了就是我们呃英文当中的一个abcd。
06:08
其实他一个字节就足够存下了。啊,所以说呢,咱们这里边一个H,其实咱们呢,用一个字节呢,去存的它也都OK啊,比如说呢,这个小A,小A不就是97嘛,我们这一个字节呢,你好,你就是分一半正的一半负的,我还知道正28呢是吧?哎,正27呢啊,我也能够把你都存下。啊是因为这个原因啊,那怎么着就不行了呢,对张大中文那不就不行了是吧?哎,我这中国人,比如说那这块呢,我们再来看一下。执行,你看此时呢,我们就会看到乱码,哎,这个原因是因为我们这个像中国人这呢,咱们这个是一个中文的了,呃,你在试图让它用一个字节去存,这就成不像了,因为在我们这个U杠八里边,这一个中文的话呢,它占的是用三个字节存的,相当于有可能我们这个长度是五,你这五里边,比如说前面已经占了,嗯,你举个例子吧,我们这呢,Be数组的长度是不是五啊,五的话呢,那这五个这是第一次for循环,哎,Be循环,第二次呢,这个for第三次的时候呢,这个123啊一个呢是占一个be,然后这个中的话呢,咱们在UTF杠巴里边一个中其实是占三个字节。
07:35
但是你现在是不是就剩俩了,那意味着其实你把这个中文的中呢,是不是就劈成两半了,这一半呢,这样存了一下,然后呢,另外这剩下这一部分呢,你放到下一次的while这个for啊while循环里了,那你这一次的时候呢,咱们把它取出来,拿一个string去读,这可不就读错了呀,出这个问题,那为啥这国没事呢,国正好对在你下一次的那一波里边五个里边含着他了,是吧,他没事了,就成这样,就是我们其其实这样写肯定就不行了啊,你会把一个汉字呢,就给它劈开了,就不OK了。那么同样的一个问题,咱们如果用fair reader writer处理,这咱们前面都做过了,比如咱们下边这个,咱们呢,还是去读这个,Hello,嗯,这呢,咱们是用的读一个字符的方式,一个也好,还是用的是这个数组也好,运行哪个都行,我们跑一下看看。
08:32
你看这是不是没问题,你上面这一个一个的读的,那我们试试那也是可以的,哎,这呢,咱们首先呢,总结出来一个事儿啊,就是说对于这种文本文件。这种文本文件的话呢,咱们说呃,其实还是应该是用我们这个字符流去读啊,那你要用字节呢,就会出现这个乱码,那反之咱们上午最后也说到了,像这个图片这种,你要是用这个字符读也不行啊,像这种图片视频,那你就得用这种字节读啊,得用这种字节读了,咱们先把这个结论呢,咱们统一的先写到这儿啊,因为这有字节流和字符流,到底呢,大家平时去复制一个文件,或者是传输一个文件的时候,我们应该怎么用啊,诶这块有这样一个说明,我们说呀,对于文本文件。
09:27
啊,我们说呢,呃,使用叫字符流啊来处理,那么对于叫非文本文件,那需要呢,去使用叫字节流处理,使用字节流来处理,就是他们呢,各自有各自处理的这些文件,那么这里提到叫文本文件,哪些文件格式属于文本文件呢?点TXT这算了,点doc算吗?算没对这个就不算了,哎,你想象一下你word文档文件里边,你是不是可以放一个图片啊,对,那你放图片,你要是再用它去字符去读不就又坏事了吗?所以不可以啊,这个doc呢,其实它是被处理过了啊,所以他不行,还有的谁行呢?咱们这个Java文件可以,或者用这个C文件C语言写的,或者你用这个。
10:27
啊哎,C加加写的是吧,啊,这种这种文件呢,这都可以,这都算是文本文件,那你可以呢,用我们这个叫呃字符流呢,去做一个读取非文本文件。这个比如说图片这个视频啊,音音频也行,然后视频MP4还有点avi的,嗯,还有什么呀,点doc,刚才咱们说到的包括呢,点PPT等等,像这些呢,我们都属于叫非文本文件。
11:06
尤其像这个word,它其实对这个进行过处理啊,你像你这个word当中,你写一行这个文本的话呢,你写着写着到指定这个它这个要求的宽度以后,自动就换行了等等,它这都是处理过的。所以说呢,它不是算一个文本文件了啊,像这些文件,如果大家呢,去操作的时候,或者传输的时候呢,应该考虑用字节流来进行处理好,这呢是我们讲到目前呢总结的一个结论,大家要注意啊成那咱们下边呢,就使用咱们的字节流来演示对这个图片的一个复制啊,就比如说这个图片想复制一份,咱们使用一下这个字节和字符啊,那这块呢,咱们刚写的这个代码呢,在这写了一个注释,说呢使用字节流file input stream啊,它呢来处理这个文本文件是可能出现乱码的,哎,这个刚才咱们已经看到了啊。
我来说两句