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

 

posted @ 2020-11-02 21:37  杰斯-java  阅读(191)  评论(0)    收藏  举报