转换流与缓冲流

流本质上分为输入流与输出流,或字节流与字符流,而转换流与缓冲流本质上是功能流,转换流是为字符指定码表,缓冲流是为了加速。

转换流:

    OutputStreamWriter:是字符流通向字节流的桥梁:可使用指定的字符编码表,将要写入流中的字符编码成字节。它的作用的就是,将字符串按照指定的编码表转成字节,在使用字节流将这些字节写出去。

              

      

      当我们需要指定码表的时候,需要用转换流,而不需要指定码表的时候,可以用他的直接子类,FileWriter.同时使用转换流,还需要配合FileOutputStream使用。

      代码如下:

        

public class Demo02 {

    public static void main(String[] args) throws IOException {
        // 创建字节输出流对象,明确目的地
        FileOutputStream fos=new FileOutputStream("D:\\io0803\\utf.txt",true);
        //创建转换流对象,明确码表
        OutputStreamWriter osw=new OutputStreamWriter(fos,"UTF-8");
        //写出一个字符串
        osw.write("我很好");
        //释放资源
        osw.close();
    }

}

    InputStreamReader:

            是字节流通向字符流的桥梁:它使用指定的字符编码表读取字节并将其解码为字符。它使用的字符集可以由名称指定或显式给定,或者可以接受平台默认的字符集。

            

     代码:

        

public class Demo03 {

    public static void main(String[] args) throws IOException {
        // 明确字节输入流对象,明确目的地
        FileInputStream fis = new FileInputStream("D:\\io0803\\utf8.txt");
        // 创建转换流对象,指定编码表
        InputStreamReader isr = new InputStreamReader(fis, "UTF-8");
        // 读取
        int len = 0;
        while ((len = isr.read()) != -1) {
            System.out.println((char) len);
        }
        // 释放资源
        isr.close();
    }

}

缓冲流:   

  代码:

      

public class Demo05 {

    public static void main(String[] args) throws IOException {
        //创建字符输入流,明确数据源
        FileReader fr=new FileReader("D:\\io0803\\abc.png");
        //创建缓冲字符流加速
        BufferedReader br=new BufferedReader(fr);
        //创建字符输入流,明确目的地
        FileWriter fw=new FileWriter("D:\\io0803\\a\\abc.png");
        //创建缓冲字符输出流加速
        BufferedWriter bw=new BufferedWriter(fw);
        //开始复制
        int len=0;
        while((len=br.read())!=-1){
            bw.write(len);
        }
        //释放资源
        br.close();
        bw.close();
    }

}

使用字符缓冲流完成文本文件的复制,用特有的方法一行一行的复制:

    

public class Demo07 {

    public static void main(String[] args) throws IOException {
        // 创建字节输入流,明确数据源
FileInputStream fis=new FileInputStream("D:\\io0803\\demo01.txt");
//创建转换流对象,指定码表
InputStreamReader isr=new InputStreamReader(fis,"UTF-8");
//创建字符缓冲流对象,加速
BufferedReader br=new BufferedReader (isr);
//创建字节输出流。明确目的地
FileOutputStream fos=new FileOutputStream("D:\\io0803\\buffer3.txt");
//创建转换流对象,明确码表
OutputStreamWriter osw=new OutputStreamWriter(fos,"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();
    }

}

 

posted @ 2020-11-01 09:31  马雪峰1  阅读(115)  评论(0编辑  收藏  举报