• 转换流与缓冲流


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

    转换流:

        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();
        }
    
    }
  • 相关阅读:
    [openjudge] jubeeeeeat
    [BJOI2006] 狼抓兔子
    [模板]网络最大流
    [HNOI2002]营业额统计
    【Java学习笔记之十一】Java中常用的8大排序算法详解总结
    【Java学习笔记之十】Java中循环语句foreach使用总结及foreach写法失效的问题
    【Java学习笔记之九】java二维数组及其多维数组的内存应用拓展延伸
    【Java学习笔记之八】JavaBean中布尔类型使用注意事项
    【Java学习笔记之七】java函数的语法规则总结
    二分图匹配--匈牙利算法模板
  • 原文地址:https://www.cnblogs.com/maxuefeng/p/13908604.html
Copyright © 2020-2023  润新知