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
BufferedWriter:34

所有建议的执行效果均优于 System.out.println。 BufferedOutputStream 似乎是最安全的选择,因为它在两个测试环境中都表现良好。不过 BufferedWriter 可能更快。

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

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

相关文章:

java - 使用 gradle 显示第一个 OSGi 构建 - 从 ant 迁移到 Gradle

Java数据库交互模式

java - 有没有办法使用spring amqp库将rabbitmq预取计数设置为100000?

java - 这样做的正确方法是什么?初始化/符号未找到错误

部署小程序时,Glassfish 中出现 java.lang.reflect.InitationTargetException

java - 循环继承和接口(interface)——A类不能实现B类接口(interface)而B类实现A接口(interface)

Java - 使用 PPQ 节拍进行计时的自定义 MIDI 音序器的可听滞后

java - Java中的二进制搜索

javascript - 表示正则表达式中的任意一组字符

java - 在 SAX 解析器中处理具有依赖性的私有(private)外部 DTD