//BufferedWriter输出
public static void print(String s, int times) { BufferedWriter writer = null;
try {
writer = new BufferedWriter(new PrintWriter(System.out));
int len = s.length();
for (int i = 0; i < times; i++) {
writer.write(s, 0, len);
}
writer.flush(); } catch (IOException e) { } finally {
try {
if (writer != null) {
writer.close();
}
} catch (IOException e) {
//
} }
}//常规输出
public static void normalPrint(String s, int times) {
for (int i = 0; i < times; i++) {
System.out.print(s);
}
}让我很惊讶的junit测试结果package test;import junit.framework.TestCase;public class PrintTest extends TestCase {
private static final String CONTENT = "abc";
private static final int TIMES = 1000000; public void testPrint() {
problem.LargerNumberOfString.print(CONTENT, TIMES);
} public void testNormalPrint() {
problem.LargerNumberOfString.normalPrint(CONTENT,TIMES);
} public static void main(String[] args) {
junit.swingui.TestRunner.run(PrintTest.class); }
}结果BufferedWriter输出大致是6S,而普通输出3s
我很费解,不是BufferedWriter会快些么
解决方案 »
- Help:SWT 中怎样实现将表项全部展开
- 请教,两个.java中的值,如何传递呢?
- 求助高手~~~java.lang.NullPointerException
- 新手问题(急)
- 如何用java打开文件的问题
- Object class 在Java和.Net中的比较,多线程部分
- 求一个简单的能同时实现类,方法,实例,属性的例子
- 有没有人把一个一维的ArrayList转化成通用的Object,其ArrayList的每一个element 对应Object的一个属性
- 有趣的数值显示格式
- 怎么样调用repaint时,只让它不重画背景?
- 一个JPanel跟JFrame错位的问题,怎么办?
- 用java实现记事本的问题
读写大的数据,都推荐用这个!
套了之后,多一层调用,所以会变慢。
建议都改成使用write方法,再比较一下
for()
{
sb.apend(xxx);
}
System.out.println(sb);这样会快不少
BufferedWriter的工作是先存贮数据到缓冲区,默认大小有8000多字节,等满了就刷新缓冲区,调用writer的write,但是我把代码改成PrintWriter printer = new PrintWriter(System.out);
int len = s.length();
for (int i = 0; i < times; i++) {
printer.write(s, 0, len);
}
printer.flush();
printer.close();之后的test结果
普通打印9.8S
PrinterWriter需要19.312s之多
其次,System.out本身就带有缓冲,只不过,它是一个自动flush的缓冲,就是遇到换行时flush。所以,你用System.out.print(),其实它还是在缓冲里面的,把print换成println,你再测试。
PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));
package com.samba.xlh;import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;public class PrintTest { // BufferedWriter输出
public static void print(String s, int times) { BufferedWriter writer = null;
try {
writer = new BufferedWriter(new PrintWriter(System.out));
int len = s.length();
for (int i = 0; i < times; i++) {
//writer.write(s, 0, len);
}
writer.flush(); } catch (IOException e) { } finally {
if (writer != null) {
// writer.close();
}
}
} // 常规输出
public static void normalPrint(String s, int times) {
for (int i = 0; i < times; i++) {
// System.out.print(s);
}
} private static final String CONTENT = "abc";
private static final int TIMES = 100000000; public static void main(String args[]) { long start = System.currentTimeMillis();
// normalPrint(CONTENT,TIMES) ; //125 141 141 93
print(CONTENT, TIMES);
long end = System.currentTimeMillis();
System.out.println(end - start);
}}平常就比BufferedWrite 要快可是当
http://xyiyy.javaeye.com/blog/361476