1. 转换流
1.1 OutputStreamWriter类-字符流通向字节流的桥梁,可使用指定的字符编码表,将要写入流中的字符编码成字节。
1.2 InputStreamReader类-字节流通向字符流的桥梁,可使用指定的字符编码表读取字节并将其解码为字符
(1)读取指定的编码的文件时,一定要指定编码格式,否则就会发生解码错误,而发生乱码现象
1.3 转换流和子类区别
(1)继承关系:
OutputStreamWriter:
|-FileWriter
InputStreamReader:
|-FileReader
(2)父类和子类的功能区别
OutputStreamWriter和InputStreamReader是字符和字节的桥梁,也可以称之为字符转换流,字符转换流原理,字节流+编码表
FileWriter和FileReader:作为子类,仅作为操作字符文件的便捷类存在。当操作的字符文件,使用的是默认编码表时可以不用父类,直接使用子类即可,简化代码
2. 缓冲流
2.1 字节缓冲流
(1)写入数据到流中,字节缓冲输出流 BuffereOutputStream
(2)读取流中的数据,字节缓冲输入流 BufferedInputStream
(3)它们的内部包含一个缓冲区,通过缓冲区读写,可以提高IO流的读写速度
2.2 字节缓冲输出流 BuffereOutputStream
(1)构造方法
public BuffereOutputStream(OutputStream out) 创建一个新的缓冲输出流,以将数据写入指定的底层输出流
2.3 字节缓冲输入流 BuffereInputStream
(1)构造方法
public BuffereInputStream(InputStream in)
2.4 字符缓冲流
(1)字符缓冲输入流 BufferedReader
(2)字符缓冲输出流 BufferedWriter
2.5 字符缓冲输出流 BufferedWriter-将文本写入字符输出流,缓冲各个字符,从而提供单个字符、数组和字符串的高效写入
(1)方法
void nextLine() 根据当前的系统,写入一个换行符
2.6 字符缓冲输入流 BufferedReader-将字符输入流中读取文本,缓冲各个字符,从而实现字符、数组和行的高效读取
(1)方法
public String readLine() 读取一个文本行,包含该行内容的字符串,不包含任何行终止符,如果已到达流末尾,则返回null
3. 流的操作规律
3.1 四个明确
(1)要操作的数据是数据源还是数据目的
源:InputStreamReader Reader
目的:OutputStream Writer
(2)要操作的数据是字节还是文本
源:
字节:InputStream
文本:Reader
目的:
字节:OutputStream
文本:Writer
(3)明确数据所在的具体设备
源设备:
硬盘:文件 File开头
内存:数组,字符串
键盘:System.in
网络:Socket
目的设备:
硬盘:文件 File开头
内存:数组,字符串
屏幕:System.out
网络:Socket
(4)是否需要额外功能
额外功能:
转换吗?转换流:InputStreamReader OutputStreamWriter
高效吗?缓冲区对象。BuffererXXX