缓冲流

2020-07-01  本文已影响0人  只取一瓢爱了解

概述

缓冲流,也叫高效流,是对4个基本流的增强,所以也是4个流,按照数据类型分类:

缓冲流的基本原理,是在创建流对象时,会创建一个内置的默认大小的缓冲区数组,通过缓冲区读写,减少系统IO次数,从而提高读写效率

字节缓冲流

BufferedOutputStream 字节缓冲输出流

public class Demo1 {
    public static void main(String[] args) throws IOException {
        // 创建FileOutputStream对象,绑定输出目的地
        FileOutputStream fos = new FileOutputStream("/Users/wym/f.txt");
        // 创建BufferedOutputStream,构造方法中传入FileOutputStream对象,提高FileOutputStream对象效率
        BufferedOutputStream bos = new BufferedOutputStream(fos);
        //把数据写入到缓冲区中
        bos.write("数据写入到内部缓冲区中".getBytes());
        //释放资源(会先调用flush方法刷新数据)
        bos.close();
    }
}

BufferedInputStream 字节缓冲输入流

public class Demo2 {
    public static void main(String[] args) throws IOException {
        // 创建FileInputStream对象,绑定要读取的数据源
        FileInputStream fis = new FileInputStream("/Users/wym/a.txt");
        // 创建BufferedInputStream对象,构造方法中传入FileInputStream对象,提高FileInputStream读取效率
        BufferedInputStream bis = new BufferedInputStream(fis);
        byte[] bytes = new byte[1024];
        int len;
        while((len = bis.read(bytes)) != -1){
            System.out.println(new String(bytes,0,len));
        }
        // 释放资源
        bis.close();
    }
}

字符缓冲流

BufferedWriter 字符缓冲输出流

public class Demo3 {
    public static void main(String[] args) throws IOException {
        BufferedWriter bw = new BufferedWriter(new FileWriter("/Users/wym/g.txt"));
        for(int i = 0;i < 10;i++){
            bw.write("德布劳内");
            bw.newLine();
        }  
        bw.close();
    }
}

BufferedReader 字符缓冲输入流

public class Demo4 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new FileWriter("/Users/wym/g.txt"));
        String line;
        while((line = br.readLine()) != null){
          System.out.println(line);
        }
        br.close();
    }
}

练习-对文本内容进行排序

public class Sort {
    public static void main(String[] args) throws IOException {
        // 创建一个HashMap集合,key:存储每行文本的序号  value:存储每行的文本
        Map<String,String> map = new HashMap<>();
        // 创建字符缓冲输入流,绑定字符输入流
        BufferedReader br = new BufferedReader(new FileReader("/Users/wym/in.txt"));
        // 创建字符缓冲输出流,绑定字符输出流
        BufferedWriter bw = new BufferedWriter(new FileWriter("/Users/wym/out.txt"));
        String line;
        // 使用readLine方法,逐行读取数据
        while((line = br.readLine()) != null){
            // 对读取的文本进行切割,获取序号和内容
            String[] arr = line.split("\\.");
            // 将切割好的序号和文本存入到map中
            map.put(arr[0],arr[1]);
        }

        // 遍历map集合,获取键值对
        for(String key : map.keySet()){
            String content = map.get(key);
            // 每一个键值对,拼接成一个文本行
            line = key + "." + content;
            // 拼接好的文本使用字符缓冲输出流中的write方法写出,并换行
            bw.write(line);
            bw.newLine();
        }

        // 释放资源
        bw.close();
        br.close();
    }
}
上一篇 下一篇

猜你喜欢

热点阅读