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%左右,非缓冲区流性能不太稳定。