二、IO流
1.概念
在工作中,会经常去操作磁盘上的一些资源,实现数据的输入和输出操作,磁盘上的资源和内存之间进行交互,资源的交互需要有一个数据流通的管道或者媒介,把这个管道或者媒介就称为IO流【Input Output】,也称为输入输出流
2.流的分类
1>按照流的流向分
输入流:只能读取数据,不能写入数据【从磁盘到内存】
输出流:只能写入数据,不能读取数据【从内存到磁盘】
2>按照处理数据单位分
字节流:byte 最小的单位为8位的字节 1个字节
字符流:char 最小的单位为16位的字符
3>按照层次分(了解)
节点流:直接使用一个已经存在的流进行读写的操作,低级流
处理流:对一个已经存在的流进行封装,通过封装后的流进行读写操作,高级流
3.字符字节流(文件流)
a.字符流 Reader Writer
b.字节流:InputStream OutputStream
c.输入流:Reader【字符输入流】,InputStream【字节输入流】
d.输出流:Writer【字符输出流】,OutputStream【字节输出流】
说明:Reader Writer InputStream OutputStream是所有输入输出流的父类,他们都是抽象类,本身不能实例化对象来执行输入输出,所以只能使用他们的子类创建对象,但是他们的使用将作为所有流使用的模板,他们的方法可以在所有的流中使用
1>文件流
FileReader--->InputStreamReader---->Reader
FileInputStream--->InputStream
FileWriter--->OutputStreamWriter--->Writer
FileOutputStream---->OutputStream
总结:
a.如果操作的是具有特殊格式的文件【图片、视频。音频。压缩包等在计算机中都是以字节的形式存在的】只能使用字节流
b.如果操作的是文本,字节流和字符流都可以使用
c.当完成流的读写操作之后,一定要进行流的关闭,避免造成资源的浪费
2>转换流
作用:实现了将字节流转换为字符流
a.InputStreamReader:【字节字符转换输入流】,将字节输入流转化为字符输入流
b.OutputStreamWriter:【字节字符转换输出流】,将字节输出流转换为字符输出流
问题一:为什么没有将字符流转换为字节流的转换流?
a.字节流比字符流的使用范围更广,但是字符流比字节流使用方便
b.可以解决字符集乱码的问题
问题二:什么时候使用转换流?
如果需要处理具有除了GBK格式之外的文本时,使用转换流
总结:
a.转换流的最大的作用主要是为了解决字符集乱码的问题【中文】
b.只有转换流才能指定读取和写入的字符集
扩展:字符集
ASCII:美国标准信息交换码
ISO8859-1:拉丁码表,比ASCII更全面
GBK:中国【占用两个字节】
Unicode:国际【融合了多种文字】
UTF-8:最多使用三个字节表示一个字符
常用:ISO8859-1,GBK,UTF-8