• java基础:IO流之缓冲流


    简介

    缓冲流属于处理流的一种

    缓冲流有四种:BufferedInputStream、BufferedOutputStream、BufferedReader、BufferedWriter

    缓冲流可以提高文件读写的速度

    BufferedInputStream和BufferedOutputStream

    先使用非缓冲流测试复制1个G的文件

    File src = new File("C:\Users\wj\Desktop\01.ts");
    File dest = new File("C:\Users\wj\Desktop\01.1.ts");
    long start = System.currentTimeMillis();
    try(FileInputStream fis = new FileInputStream(src);
        FileOutputStream fos = new FileOutputStream(dest)){
        byte[] buffer = new byte[1024];
        int len;
        while ((len = fis.read(buffer)) != -1){
            fos.write(buffer, 0, len);
        }
    }catch (IOException e){
        e.printStackTrace();
    }
    long end = System.currentTimeMillis();
    System.out.println(end-start);
    

    耗费11s

    image-20210422114638449

    BufferedInputStream和BufferedOutputStream的使用与FileInputStream和FileOutputStream差不多,这里不详细介绍。

    这里jdk底层使用的装饰器设计模式,我们用BufferedInputStream包装FileInputStream即可,BufferedOutputStream也是如此。

    File src = new File("C:\Users\wj\Desktop\01.ts");
    File dest = new File("C:\Users\wj\Desktop\01.2.ts");
    long start = System.currentTimeMillis();
    try(BufferedInputStream bis = new BufferedInputStream(new FileInputStream(src));
        BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(dest))){
        byte[] buffer = new byte[1024];
        int len;
        while ((len = bis.read(buffer)) != -1){
            bos.write(buffer, 0, len);
        }
    }catch (IOException e){
        e.printStackTrace();
    }
    long end = System.currentTimeMillis();
    System.out.println(end-start);
    

    两秒多就可以完成:效率提升十分明显

    image-20210422114837147

    内部原理:内部提供了一个缓存区

    BufferedReader、BufferedWriter

    测试按行读取并复制文本文件:

    File src = new File("斗破苍穹.txt");
    File dest = new File("斗破苍穹-buffered.txt");
    long start = System.currentTimeMillis();
    try(BufferedReader br = new BufferedReader(new FileReader(src));
        BufferedWriter bw = new BufferedWriter(new FileWriter(dest))){
        String line ;
        //按行读取
        while ((line = br.readLine()) != null){
            bw.write(line);
            bw.newLine();//换行
        }
    }catch (IOException e){
        e.printStackTrace();
    }
    long end = System.currentTimeMillis();
    System.out.println(end-start);
    

    复制出来的文件也是没有问题的

    image-20210422121056302

  • 相关阅读:
    004-ant design -dispatch、request、fetch
    003-and design-dva.js 知识导图-02-Reducer,Effect,Subscription,Router,dva配置,工具
    002-and design-dva.js 知识导图-01JavaScript 语言,React Component
    003-and design-在create-react-app项目中使用antd
    002-and design-基于dva的基本项目搭建
    001-ant design安装及快速入门【基于纯antd的基本项目搭建】
    103-advanced-上下文
    102-advanced-代码分割
    101-advanced-React易用性,概述
    007-spring cache-缓存实现-02-springboot ehcahe2、ehcache3实现、springboot caffeine实现
  • 原文地址:https://www.cnblogs.com/wwjj4811/p/14689012.html
Copyright © 2020-2023  润新知