-------------android培训 、java培训、期待与你交流-------------
一、IO流概述部分
1.IO流的作用:用来处理设备之间的数据传输、Java对数据的操作就是通过流的方式
2.Java操作流的存放位置:都放在Java.io包中
3.流的分类
1)根据流的流向:
A.输入流:向内存中读入数据
B.输出流:向硬盘中写出数据
2)根据流的操作的数据:
A.字节流:按字节操作数据
B.字符流:按字符操作的数据
说明:因为计算机要识别生活中的符号,就必须用一些二进制数据来表示生活中的符号,于是就把生活中的符号与其对应的二进制数对应起来,于是就出现了ASCII表,由于是美国人做的,所以不能识别中文,后来又出了编码表GB2312等一系列能识别中文的,最后出了一张统一的(能识别中英文)UTF-8。由于各国的不同编码表,所以对于同一个中文字符在不同的编码表中对应的二进制数不一样。所以会导致中文乱码,为解决这个问题,就在字节流的基础上,出现了字符流。其实字符流,为字节指定编码表后,然后把组成一个字符的字节分批读取,提高效率。
4.关于流选择的原则
通过上面的说明,可以知道字节流是通用的(无论是纯文本、图片、MP3、视频)。但是对于纯文本来说,应该采用字符流,这样按字符读取,效率比按字节高得多 所以综上所诉:如果是纯字符,则采用字符流,否则采用字节流。
二、深入字符流
通过查看源代码我们可以看出其实字符流最后也是去调用字节流的输出方法我们用Writer的子类OutputStreamWriter来看
下面我们来看outputStreamWriter中的write()方法
调用的是StreamEncoder中的write方法(其他几个重载的我就没截图了,最后都是调用的StreamEncoder的writer方法),我们再来看StreamEncoder的write方法
最后调用implWrite方法再看implWrite方法
再看writeBytes方法
由上面的代码看出调用的是outputStream的write方法,而outputStream就是输出字节流
input和flush的相关代码就不再赘述了。都大同小异.
综上看出,字符流就是对字节流的一次再封装。