上一博客遇到过这个问题,因此实际测试一番。
首先看BufferedWriter:
public void writeFile_BufferedWriter() throws FileNameException {
try {
FileOutputStream outputStream=new FileOutputStream(file);
OutputStreamWriter writer=new OutputStreamWriter(outputStream,"GBK");
BufferedWriter bufferedWriter=new BufferedWriter(writer);
long stratTime = System.nanoTime();
for(int i=0;i<12345;i++) {
bufferedWriter.write("你好");
}
long endTime = System.nanoTime();
System.out.println("BufferedWriter消耗时间"+(endTime-stratTime));
bufferedWriter.close();
writer.close();
outputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
运行结果为:
BufferedWriter消耗时间7382478
public void writeFile_NoBufferedWriter() throws FileNameException {
try {
FileOutputStream outputStream=new FileOutputStream(file);
OutputStreamWriter writer=new OutputStreamWriter(outputStream,"GBK");
long stratTime = System.nanoTime();
for(int i=0;i<12345;i++) {
writer.write("你好");
}
long endTime = System.nanoTime();
System.out.println("NoBufferedWriter消耗时间"+(endTime-stratTime));
writer.close();
outputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
运行结果为:
NoBufferedWriter消耗时间20439312
一起比较下两个结果:
BufferedWriter消耗时间7382478
NoBufferedWriter消耗时间20439312
很明显看出数量级的差异。一个7位一个8位。
接下来看BufferedReader:
public void readerFile()throws FileNameException, FileNotFoundException, UnsupportedEncodingException {
try {
FileInputStream in=new FileInputStream(file);
BufferedReader bufferedReader=new BufferedReader(
new InputStreamReader(in, "GBK"));
StringBuffer buffer=new StringBuffer();
char[] buf=new char[64];
int count=0;
long stratTime = System.nanoTime();
while((count=bufferedReader.read(buf))!=-1) {
buffer.append(buf,0,count);
}
long endTime = System.nanoTime();
System.out.println("BufferedReader消耗时间:"+(endTime-stratTime));
bufferedReader.close();
} catch (IOException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
}
运行结果为:
BufferedReader消耗时间:7299266
public void readerFile_NoBufferedReader()throws FileNameException, FileNotFoundException, UnsupportedEncodingException {
try {
FileInputStream in=new FileInputStream(file);
InputStreamReader in2=new InputStreamReader(in, "GBK");
StringBuffer buffer=new StringBuffer();
char[] buf=new char[64];
int count=0;
long stratTime = System.nanoTime();
while((count=in2.read(buf))!=-1) {
buffer.append(buf,0,count);
}
long endTime = System.nanoTime();
System.out.println("NoBufferedReader消耗时间:"+(endTime-stratTime));
in.close();
in2.close();
} catch (IOException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
}
运行结果为:
NoBufferedReader消耗时间:7714185
对比一下结果
BufferedReader消耗时间:7299266
NoBufferedReader消耗时间:7714185
虽然结果差距不是很大但也比较明显。
我们再将4个结果一起来看一下;
BufferedWriter消耗时间7382478
NoBufferedWriter消耗时间20439312
BufferedReader消耗时间:7299266
NoBufferedReader消耗时间:7714185
可以看出有 Buffered情况下读写差距不是很大。
但没有Buffered情况下读写差距就非常打,而且写的时间比读的时间大很多。因此我们可以得出一个这样结论BufferedWrite提升的效率比BufferedReader高,所以写文件一定要加上BufferedWrite。当然读写都加是最好。
注意: 读写都是同一个文件,并且在写之前都将内容清空,而且读的文件内容就是之前写的内容。还有就是从数学角度来看上面结论不严谨,要得出严谨的结论要得出大规模数据再进行分析才有效,因此如有错误请指出。