1.转换流的意义
由于某些电脑的系统默认编码与文本文档或有需求时的编码不同时,这是就要用到转换流来进行编码集的转换。
2.OutputStreamWriter类
首先我们看到Writer结尾,那肯定是字符类的,我们再看构造方法,他还是不能自己确定目的地。
实际操作
1 public class demo01 { 2 public static void main(String[] args) throws IOException { 3 //明确目的地 4 FileOutputStream fos = 5 new FileOutputStream("D:\\io0429\\utf8.txt"); 6 //添加转换流 7 OutputStreamWriter osw = new OutputStreamWriter(fos,"utf-8"); 8 //写入字符 9 osw.write("你好"); 10 //释放资源 11 osw.close(); 12 } 13 }
3.InputStreamReader
构造方法相同
注意:在读取指定的编码的文件时,一定要指定编码格式,否则就会发生解码错误,而发生乱码现象。
实际操作
1 public class demo02 { 2 public static void main(String[] args) throws IOException { 3 //明确数据源 4 FileInputStream fis = new FileInputStream("D:\\io0429\\utf8.txt"); 5 //添加转换流 6 InputStreamReader isr = new InputStreamReader(fis,"utf-8"); 7 int len = 0; 8 while((len = isr.read()) != -1){ 9 System.out.println((char)len); 10 } 11 //释放资源 12 isr.close(); 13 } 14 }
4.流的操作规律
第一点:要操作的是数据源还是目的地
源:InputStream Reader; 目的地: OutputStream Writer;
第二点:要操作的数据是字节还是文本
字节:InputStream OutPutStream; 文本:Writer Reader;
第三点:明确数据所在的具体位置
源设备:
硬盘:文件 File开头。
内存:数组,字符串。
键盘:System.in;
网络:Socket
目的设备:
硬盘:文件 File开头。
内存:数组,字符串。
屏幕:System.out
网络:Socket
第四点:是否需要额外功能
转换流。InputStreamReader OutputStreamWriter
缓冲区对象。BufferedOutputStream BufferedInputStream BufferedWriter BufferedReader