java - 将字符串输出到系统输出的最快方法是什么?

标签 java

我正在做这样的事情:

for (int i = 0; i < 100000; i++) {
   System.out.println( i );
}

基本上,我计算一个整数并输出一个字符串大约 10K-100K 次,然后需要将结果写入 system.out,每个结果用换行符分隔。

实现此目标最快的方法是什么?

最佳答案

感谢您的建议。我创建了一个测试程序来比较它们:

import java.io.BufferedOutputStream;
import java.io.BufferedWriter;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.lang.StringBuilder;

public class systemouttest {

    public static void main(String[] args) throws Exception {

        long starttime = System.currentTimeMillis();
        for (int i = 0; i < 100000; i++) {
           System.out.println( i );
        }
        long printlntime = System.currentTimeMillis();

        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < 100000; i++) {
            sb.append( i + "\n" );
        }
        System.out.print(sb.toString());
        long stringbuildertime = System.currentTimeMillis();

        OutputStream out = new BufferedOutputStream ( System.out );
        for (int i = 0; i < 100000; i++) {
            out.write((i + "\n").getBytes());
        }
        out.flush();
        long bufferedoutputtime = System.currentTimeMillis();

        BufferedWriter log = new BufferedWriter(new OutputStreamWriter(System.out));
        for (int i = 0; i < 100000; i++) {
            log.write(i + "\n");
        }
        log.flush();
        long bufferedwritertime = System.currentTimeMillis();

        System.out.println( "System.out.println: " + (printlntime - starttime) );
        System.out.println( "StringBuilder: " + (stringbuildertime - printlntime) );
        System.out.println( "BufferedoutputStream: " + (bufferedoutputtime - stringbuildertime) );
        System.out.println( "BufferedWriter: " + (bufferedwritertime - bufferedoutputtime) );
    }

}

结果:

环境1
System.out.println: 482
字符串生成器:210
缓冲输出流:86
缓冲写入器:202

环境2
System.out.println: 1763
字符串生成器:45
缓冲输出流:76
缓冲写入器:34

这些建议都比 System.out.println 表现得更好。 BufferedOutputStream 似乎是最安全的选择,因为它在两种测试环境中都表现良好。不过 BufferedWriter 可能更快。

如果有人有一些想法,请发表进一步的建议。我相信有人可以让它运行得更快 :)

关于java - 将字符串输出到系统输出的最快方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11823095/

相关文章:

java - 递归打印二维数组的问题

java - 未找到启动器 Activity

java - 我去哪里购买 Java EE jar?

java - Google App Engine - Java Servlet - 文件访问

java - 免费的java 3d引擎

java - XML 不使用转义字符进行解析

java - TriggerBuilder<Trigger> 类型中的 withSchedule(ScheduleBuilder<SBT>) 不适用于参数 (MutableTrigger)

java - Java SE 应用程序如何作为服务在我的 Windows NT 服务器上运行

java - getCameraIdList() 函数返回一个空数组

java - 如何获取扫描仪对象并使其成为字符串