将字符串输出到系统的最快方法是什么? [英] What's the fastest way to output a string to system out?

查看:87
本文介绍了将字符串输出到系统的最快方法是什么?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在做这样的事情:

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

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

Basically, I compute an integer and output a string about 10K-100K times and then need to write the result to system.out, each result separated by a newline.

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

What's the fastest way to achieve this?

推荐答案

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

Thank you for the suggestions. I created a test program to compare them:

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) );
    }

}

结果:



Environment1

System.out.println:482

StringBuilder:210

BufferedoutputStream:86

BufferedWriter:202



Environment2

System.out.println:1763

StringBuilder:45

BufferedoutputStream:76

BufferedWriter:34

Results:

Environment1
System.out.println: 482
StringBuilder: 210
BufferedoutputStream: 86
BufferedWriter: 202

Environment2
System.out.println: 1763
StringBuilder: 45
BufferedoutputStream: 76
BufferedWriter: 34

所有建议都比System.out.println更好。 BufferedOutputStream似乎是最安全的选择,因为它在两个测试环境中都表现良好。 BufferedWriter可能会更快。

The suggestions all performed better than System.out.println. BufferedOutputStream seems to be the safest choice as it performed well in both test environments. BufferedWriter maybe faster though.

如果有人有想法,请发布更多建议。我相信有人可以让它变得更快:)

Please post further suggestions if anyone has some ideas. I'm sure someone can make it go faster :)

这篇关于将字符串输出到系统的最快方法是什么?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆