IO流之转换流
1.转换流
用来指定编码
2.OutputStreamWriter类
是字符流通向字节流的桥梁
3.InputStreamReader类
是字节流通向字符流的桥梁
注意:在读取指定的编码的文件时,一定要指定编码格式,否则就会发生解码错误,而发生乱码现象。
总结:
字节--->字符 : 看不懂的--->看的懂的。 需要读。输入流。 InputStreamReader
字符--->字节 : 看的懂的--->看不懂的。 需要写。输出流。 OutputStreamWriter
4.缓冲流
字节缓冲流
字节缓冲流根据流的方向,共有2个
- 写入数据到流中,字节缓冲输出流 BufferedOutputStream
- 读取流中的数据,字节缓冲输入流 BufferedInputStream
public static void main(String[] args) throws IOException { //创建字节输入流,明确数据源 FileInputStream fis=new FileInputStream("/Users/air/io0803/demo10.txt"); //创建转换流对象 知道码表 InputStreamReader isr=new InputStreamReader(fis,"UTF-8"); //创建字符输入缓冲流 BufferedReader br=new BufferedReader(isr); //创建字节输出流 FileOutputStream fw=new FileOutputStream("/Users/air/io0803/buffer3.txt"); //创建转换流对象 OutputStreamWriter osw=new OutputStreamWriter(fw,"UTF-8"); //创建字符输出缓冲流 BufferedWriter bw=new BufferedWriter(osw); //开始复制(文本行) String line=null; while((line=br.readLine())!=null) { //写一行 bw.write(line); //换行 bw.newLine(); //刷新 bw.flush(); } //释放资源 br.close(); bw.close(); }
5.字符缓冲流
- 字符缓冲输入流 BufferedReader
- 字符缓冲输出流 BufferedWriter
public static void main(String[] args) throws IOException { //创建字符输入流,明确数据源 FileReader fr=new FileReader("/Users/air/io0803/demo10.txt"); //创建字符输入缓冲流 BufferedReader br=new BufferedReader(fr); //创建字符输出流 FileWriter fw=new FileWriter("/Users/air/io0803/buffer3.txt"); //创建字符输出缓冲流 BufferedWriter bw=new BufferedWriter(fw); //开始复制(文本行) String line=null; while((line=br.readLine())!=null) { //写一行 bw.write(line); //换行 bw.newLine(); //刷新 bw.flush(); } //释放资源 br.close(); bw.close(); }
6.流的操作规律
- 明确一:要操作的数据是数据源还是数据目的。
源:InputStream Reader
目的:OutputStream Writer
先根据需求明确要读,还是要写。
- 明确二:要操作的数据是字节还是文本呢?
源:
字节:InputStream
文本:Reader
目的:
字节:OutputStream
文本:Writer
已经明确到了具体的体系上。
- 明确三:明确数据所在的具体设备。
源设备:
硬盘:文件 File开头。
内存:数组,字符串。
键盘:System.in;
网络:Socket
目的设备:
硬盘:文件 File开头。
内存:数组,字符串。
屏幕:System.out
网络:Socket
完全可以明确具体要使用哪个流对象。
- 明确四:是否需要额外功能呢?
额外功能:
转换吗?转换流。InputStreamReader OutputStreamWriter
高效吗?缓冲区对象。BufferedXXX
浙公网安备 33010602011771号