IO流之转换流

IO流之转换流

1.转换流的意义

由于某些电脑的系统默认编码与文本文档或有需求时的编码不同时,这是就要用到转换流来进行编码集的转换。

2.OutputStreamWriter类

首先我们看到Writer结尾,那肯定是字符类的,我们再看构造方法,他还是不能自己确定目的地。

IO流之转换流

实际操作

 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

构造方法相同

IO流之转换流

注意:在读取指定的编码的文件时,一定要指定编码格式,否则就会发生解码错误,而发生乱码现象。

实际操作

 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