当前位置: 首页 > 面试题库 >

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

丁嘉
2023-03-14
问题内容

我正在做这样的事情:

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

}

结果:

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也许更快。

如果有人有任何想法,请发表进一步的建议。我敢肯定有人可以使它更快:)



 类似资料:
  • 我正在做这样的事情: 基本上,我计算一个整数并输出一个字符串大约10k-100k次,然后需要将结果写入System.out,每个结果用换行分隔。 最快的方法是什么?

  • 我是java初学者,我对上述程序的输出感到困惑。请给我解释一下输出的原因。

  • 问题内容: 使用Java-8,我可以使用或方法轻松地将(或任何)视为。 然后,我可以操纵流的内容 我一直在寻找一种打印结果的整洁方法,但我什至找不到简单的方法。如何将这一系列s放回可以像我可以打印的形式打印。 从上面我希望打印 问题答案: 但是,仍然更简单。并不是所有的东西都能从lambda中受益。

  • 主要内容:字符串的输出,字符串的输入其实在《 C语言输入输出》一章中我们已经提到了如何输入输出字符串,但是那个时候我们还没有讲解字符串,大家理解的可能不透彻,所以本节我们有必要再深入和细化一下。 字符串的输出 在C语言中,有两个函数可以在控制台(显示器)上输出字符串,它们分别是: puts():输出字符串并自动换行,该函数只能输出字符串。 printf():通过格式控制符输出字符串,不能自动换行。除了字符串,printf() 还能输

  • 《 C++ cout.put()》一节中,讲解了 ostream 类提供的 put() 成员方法的用法,其用于向输出流缓冲区中添加要输出的单个字符。而在某些场景中,我们还需要输出指定的字符串,这时可以使用 ostream 类提供的 write() 成员方法。 write() 成员方法专用于向输出流缓冲区中添加指定的字符串,初学者可以简单的理解为输出指定的字符串。其语法格式如下: ostream&w

  • 我在Linux中使用的Java版本是: OpenJDK版本“16.0.2”2021-07-20 OpenJDK运行时环境(构建16.0.2+7) OpenJDK 64位服务器VM(构建16.0.2+7,混合模式) 这是我从Head-First Java书中编译的代码: 为什么那个特殊字符(%)会出现在字符串的末尾,我如何编写代码来去掉它?