黑马程序员_java的IO流(对第十九课字节流及转换流的总结二)

来源:互联网 发布:莫烦 tensorflow 编辑:程序博客网 时间:2024/06/04 23:31

------- android培训、java培训、期待与您交流! ----------

通过今天对java语言IO流的学习,我来给自己的学习内容做下简单直白的总结:

首先让我来总结下字节流特点:

它和字符流差不多,只是它操作的都是字节数据..(其实字符流操作的也是字节数据,但需要编码表)


我们如何使用字节流来进行文本数据的读取和写入呢?

我们知道字符流(FileReader类)可以读取单个字符或字符数组..

字节流(FileInputstream类)能读取单个字节或字节数组...但字节流有一个特有的方法available(),它能拿到文件的大小(也就是读到了多少个字节)...这样我们在定义数组进行读取的时候,就可以定义刚刚合适的数组长度了,不用在循环了(有局限性,建议文件不大的时候使用)

我们知道字符流(FileWriter类)可以写入单个字节,字符串以及字符数组..

而字节流(FileOutputStream类)只能写入单个字节和字节数组,是不能写字符串的(我们可以将字符串变成字节数组)

注意:字符流在写入字符的时候需要刷新操作,而字节流在没有使用缓冲区时是不需要的,会直接写入目的地了...


字节流不仅可以使用在文本数据的读取和写入上,也能对图片和媒体数据进行读取和写入:

对图片数据读取和写入:代码如图:


注意:字符流不能操作媒体图片数据,因为字符流读一段会去查表,如果没找到对应的数字,会不一样...

扩展:不仅仅可以使用缓冲区来加强字符流,还能使用缓冲区来加强字节流...(用法相同,只是字节流的缓冲区功能没有字符流缓冲区功能强大)



下面来总结下怎样使用字节流来读取键盘录入:

System.out:对应的是标准的输出设备(控制台)

System.in:对应的是标准的输入设备(键盘)

先用一段代码视图来演示下怎样读取键盘录入的:


总结到这里,我们来思考一下,以上是读一个打印一个的方式...我们能不能使用readLine方法来完成键盘录入一行数据的读取呢?

readLine方法是字符流缓冲区BufferedReader()中的方法..

而键盘录入是字节流InputStream类中的方法..

那么,我们能不能将字节流转换成字符流,在使用字符流缓冲区中的readLine方法呢?


下面,我就来总结下转换流:

字节流转换成字符流:IntputStreamReader(要接受指定的字节流)

字符流转换成字节流:OutputStreamWriter(要接受指定的字符流)

互相转换后,可以使用到缓冲区特有的功能:如图:





最后,我来总结下流的操作规律:通过3个明确来完成

1,先明确源和目的..

源:读取流(InputStream和Reader)

目的:写入流(OutputStream和Writer)

2,操作的数据是否是纯文本?

是:就字符流

不是:就字节流

3,当体系明确后,在明确要使用哪个具体的对象:

通过设备来进行区分:

源:内存,硬盘,键盘

目的:内存,硬盘,控制台

来个例子:比如讲一个文本文件的数据储存到另一个文件中(拷贝文件)

1,先明确源:因为是源,我们可以使用读取流(InputStream和Reader

2,是不是纯文本:是纯文本,我们可以使用字符读取流(Reader

这样体系就明确了...

3,明确下使用该体系中的哪个对象:

明确设备:硬盘(上的一个文件)

Reader体系中可以操作文件的对象:FlieReader类

注意:我们最后可以思考下,需不需要提高效率,需要的话就使用Reader体系中的缓冲区...

通过3个明确,我们就可以完成操作,目的也可以通过上面3步来明确....


扩展:转换流的由来就是因为它里面可以指定编码表,指定编码表只有转换流才能指定...







原创粉丝点击