BufferedReader,BufferedWriter性能测试,结果咋就失望了呢?

seamusz 2014-11-24 01:41:07
说明:
1.d:/iotest/1.txt文件是一个纯文本文件,大小为25.4M;
2.execute1方法不使用缓冲区,execute2方法使用缓冲区;
3.execute1方法和execute2方法分别循环10次;

结果:
execute1方法循环10次所需时间4.059s
execute2方法循环10次所需时间5.730s

上代码:

package io;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Reader;
import java.io.Writer;

import org.junit.Test;

public class Reader_Writer_Test {
@Test
public void testExecute() {
for (int i = 0; i <10; i++) {
execute1();
//execute2();
}

}

/**
* 简单描述:不使用缓冲区BufferedReader,BufferedWriter
* <p>
*/
private static void execute1() {
Reader fileReader = null;
Writer fileWriter = null;
try {
fileReader = new FileReader("d:/iotest/1.txt");
// fileReader = new FileReader(new File("d:/iotest/reader.txt"));
fileWriter = new FileWriter("d:/iotest/111.txt");
char[] cbuf = new char[1024*1024];
int lenth = 0;
while ((lenth = fileReader.read(cbuf)) != -1) {
fileWriter.write(cbuf, 0, lenth);
fileWriter.flush();
}
fileWriter.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (null != fileReader) {
fileReader.close();
}

if (null != fileWriter) {
fileWriter.close();
}

} catch (IOException e) {
e.printStackTrace();
}
}
}

/**
* 简单描述:使用缓冲区BufferedReader,BufferedWriter
* <p>
*/
private static void execute2() {
BufferedReader bufReader = null;
BufferedWriter bufWriter = null;
try {
bufReader = new BufferedReader(new FileReader("d:/iotest/1.txt"));
bufWriter = new BufferedWriter(new FileWriter("d:/iotest/222.txt"));
String line = null;
while ((line = bufReader.readLine()) != null) {
bufWriter.write(line);
bufWriter.flush();
}

} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (null != bufReader) {
bufReader.close();
}

if (null != bufWriter) {
bufWriter.close();
}

} catch (IOException e) {
e.printStackTrace();
}
}
}

}
...全文
142 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
seamusz 2014-11-24
  • 打赏
  • 举报
回复
楼上正解,感谢
wyc_ 2014-11-24
  • 打赏
  • 举报
回复
首先未加缓冲的是每次读取1K,然后写入输出流。加缓冲区的是每次读取一行,flush后写入输出流。一行的数据没有1K吧,所以加了缓冲区的反而没有不加缓冲区的快。把flush去掉,缓冲区满了它会自动写入输出流。

67,514

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧