java将字符串分段输出_关于java:将字符串输出到系统输出的最快方法是什么?...

我在做这样的事情:

for (int i = 0; i < 100000; i++) {

System.out.println( i );

}

基本上,我计算一个整数,输出一个大约10-100千次的字符串,然后需要将结果写入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 +"

" );

}

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 +"

").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 +"

");

}

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系统输出打印号:482字符串生成器:210缓冲输出流:86缓冲写入程序:202环境2系统输出打印编号:1763字符串生成器:45缓冲输出流:76BufferedWriter:34个

这些建议都比system.out.println执行得更好。BufferedOutputstream似乎是最安全的选择,因为它在两个测试环境中都表现良好。不过BufferedWriter可能更快。

如果有人有什么想法,请发表进一步的建议。我相信有人能让它跑得更快。)

请参阅如何在Java中编写正确的微基准测试程序?因为你在这里贴的尺寸很可能不可靠

对于大量数据,System.out.println可能效率低下,因为它没有效率。做得很好的缓冲。在这种情况下,您可以使用BufferedOutputStream或BufferedWriter。

请记住,与内存处理(例如,整数解析)相比,I/O操作非常慢。因此,我建议您提前创建整个字符串,然后只打印一次(当然,如果可能的话):

StringBuilder sb = new StringBuilder();。

for(int i = 0 ; i < 100000; i++) { sb.append(i).append("

");}

String printMe = sb.toString();

System.out.println(printMe);

有各种各样的技术,比如缓冲您正在使用的输出流的级别,但是我假设您更喜欢使用最基本的System.out.println。

希望这有帮助

或者使用BufferedWriter获得相同的效果。

谢谢您的建议,我将创建一个测试程序来比较它们。

我想你是说Integer.toString(int)而不是使用Integer.parseInt(String)

写入System.Out的最慢部分是显示正在写入的内容所用的时间。也就是说,对于你写的每一行,计算机必须使用字体将信息转换成像素,并滚动整行。这比显示文本可能要做的工作多得多。

您可以通过以下方式加快对控制台的写入速度

少写(通常是最好的主意)

改为写入文件(速度可能快5-10倍)

或者写入一个空设备(例如/dev/null),这会切断存储层。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值