I/O流性能测量-缓冲流和非缓冲流

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

public class BufferedInputFile {

    /**
     * @param String filename
     * @see BufferReader  
     * */

    public static String read(String filename) throws IOException{
        BufferedReader in=new BufferedReader(new FileReader(filename));
        String temp;
        //设置字符串
        StringBuilder stringBuilder=new StringBuilder();
        while((temp=in.readLine())!=null) {
            stringBuilder.append(temp+"\n");
        }
        //关闭输入流
        in.close();
        return stringBuilder.toString();
    }

}

上面是一个工具类用于将指定文件读出。
通过虚拟机的高精度API,nonotime,测量非缓冲流与缓冲流间的差异,你可以通过注释切换指定行号代码来观察性能差异。

注意:你应该在代码中指定一个任意路径的文本文件。

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.StringReader;

public class BasicFileOutput {
    static String filename="一个任意路径的文本文件";
    public static void main(String[] args) throws IOException{
        long begin=System.nanoTime();
        BufferedReader selfBufferedReader=
                new BufferedReader(new StringReader(BufferedInputFile.read("./src/BasicFileOutput.java")));
        /**这里注释切换本行和下一行,观察性能差异**/
        //PrintWriter printWriter=new PrintWriter(new BufferedWriter(new FileWriter(filename)));
        PrintWriter printWriter=new PrintWriter(new FileWriter(filename));
        String temp;
        int lineCount=1;
        while((temp=selfBufferedReader.readLine())!=null) {
            //用printWriter将文件信息输出到filename所代表地文件
            printWriter.println(lineCount+" "+temp);
            lineCount++;
        }

        long end=System.nanoTime();
        long timeConsuming=end-begin;
        System.out.println("=====================================");
        System.out.println("Time Consuming:"+timeConsuming/1000+"us");
        System.out.println("=====================================");

        printWriter.println("=====================================");
        printWriter.println("Time Consuming:"+timeConsuming/1000+"us");
        printWriter.println("=====================================");
        printWriter.close();
        //在命令行显示输出文件地内容
        System.out.println(BufferedInputFile.read(filename));
    }

}

观察结果

带缓冲区的流性能大约提升25%左右,非缓冲区流性能不太稳定。

猜你喜欢

转载自blog.csdn.net/qq_33745102/article/details/80402914