What's the fastest way to output a string to system out?

前端 未结 5 1776
南旧
南旧 2020-12-04 22:58

I\'m doing something like this:

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

Basically, I compute an integer and out

5条回答
  •  盖世英雄少女心
    2020-12-04 23:19

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

    Results:

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

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

    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 :)

提交回复
热议问题