我正在做这样的事情:
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
StringBuilder:210
BufferedoutputStream:86
BufferedWriter:202
环境2
System.out.println:1763
StringBuilder:45
BufferedoutputStream:76
BufferedWriter:34
所有建议都比System.out.println更好. BufferedOutputStream似乎是最安全的选择,因为它在两个测试环境中都表现良好. BufferedWriter可能更快.
如果有人有想法,请发布进一步的建议.我相信有人可以让它变得更快:)
标签:java
来源: https://codeday.me/bug/20190926/1821501.html