I/O流之缓存流效率测试

本文在于测试使用缓存流是否可以提高流的读写效率
使用的计时工具是由Hutool提供的TimeInterval
测试内容是复制文件,文件大小为6499kb
实验组:
1、使用FileReader文件字符输入流读取文件内容,再使用FileWriter文件字符输出流写入,一个一个字节读取。
2、使用FileReader文件字符输入流读取文件内容,再使用FileWriter文件字符输出流写入,一个一个字节数组读取。
3、使用BufferReader字符缓冲流包装FileReader读取,使用BufferWriter字符缓冲流包装FileWriter写入,一个一个字节读取。
4、使用BufferReader字符缓冲流包装FileReader读取,使用BufferWriter字符缓冲流包装FileWriter写入,一个一个字节数组读取。
组一:
代码:

点击查看代码
package kaifa.kingdee;


import cn.hutool.core.date.DateUtil;
import cn.hutool.core.date.TimeInterval;

import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class Test2 {

    public static void main(String[] args) throws IOException {
        TimeInterval timer = DateUtil.timer();

        FileReader fr = new FileReader("D:\\TestOne.java");
        FileWriter fw = new FileWriter("D:\\Test.txt");
        int len = 0;
        while((len = fr.read()) != -1){
            fw.write(len);
        }
        //由于调用了底层资源,所以需要close(资源是在硬盘中)
        fw.flush();
        fr.close();
        fw.close();

        System.out.println("花费了"+timer.interval()+"ms");
    }
}

结果: ![image](https://www.icode9.com/i/l/?n=22&i=blog/2451771/202202/2451771-20220211100958949-45669592.png) 组二: 代码:
点击查看代码
package kaifa.kingdee;


import cn.hutool.core.date.DateUtil;
import cn.hutool.core.date.TimeInterval;

import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class Test2 {

    public static void main(String[] args) throws IOException {
        TimeInterval timer = DateUtil.timer();

        FileReader fr = new FileReader("D:\\TestOne.java");
        FileWriter fw = new FileWriter("D:\\Test.txt");
        char[] a = new char[1024];
        int len = 0;
        while((len = fr.read(a)) != -1){
            fw.write(a);
        }
        //由于调用了底层资源,所以需要close(资源是在硬盘中)
        fw.flush();
        fr.close();
        fw.close();

        System.out.println("花费了"+timer.interval()+"ms");
    }
}
结果:![image](https://www.icode9.com/i/l/?n=22&i=blog/2451771/202202/2451771-20220211101221596-918989386.png) 使用字符数组后,花费时间明显减少。 组三: 代码:
点击查看代码
package kaifa.kingdee;


import cn.hutool.core.date.DateUtil;
import cn.hutool.core.date.TimeInterval;

import java.io.*;

public class Test2 {

    public static void main(String[] args) throws IOException {
        TimeInterval timer = DateUtil.timer();

        FileReader fr = new FileReader("D:\\TestOne.java");
        BufferedReader br = new BufferedReader(fr);
        FileWriter fw = new FileWriter("D:\\Test.txt");
        BufferedWriter bw = new BufferedWriter(fw);
        int len = 0;
        while(( len = br.read() ) != -1){
            bw.write(len);
        }
        //由于调用了底层资源,所以需要close(资源是在硬盘中)
        fw.flush();
        fr.close();
        fw.close();
        System.out.println("花费了"+timer.interval()+"ms");
    }
}

结果: ![image](https://www.icode9.com/i/l/?n=22&i=blog/2451771/202202/2451771-20220211101756977-23710474.png) 和组一形成对照,同样是一个字符一个字符的读取,时间明显减少。 组四: 代码:
点击查看代码
package kaifa.kingdee;


import cn.hutool.core.date.DateUtil;
import cn.hutool.core.date.TimeInterval;

import java.io.*;

public class Test2 {

    public static void main(String[] args) throws IOException {
        TimeInterval timer = DateUtil.timer();

        FileReader fr = new FileReader("D:\\TestOne.java");
        BufferedReader br = new BufferedReader(fr);
        FileWriter fw = new FileWriter("D:\\Test.txt");
        BufferedWriter bw = new BufferedWriter(fw);
        char[] a = new char[1024];
        int len = 0;
        while(( len = br.read(a) ) != -1){
            bw.write(a);
        }
        //由于调用了底层资源,所以需要close(资源是在硬盘中)
        fw.flush();
        fr.close();
        fw.close();
        System.out.println("花费了"+timer.interval()+"ms");
    }
}

结果: ![image](https://www.icode9.com/i/l/?n=22&i=blog/2451771/202202/2451771-20220211102050026-1468723444.png) 时间花费最少 测试结果都有误差,误差范围在50ms内。
上一篇:MYSQL查询近一周数据并且为空得数据自动赋值为0


下一篇:Django数据库迁移命令