在java中使用BufferedOutputStream打印整数

时间:2016-03-14 09:12:44

标签: java

需要在控制台中打印一百万个值,与System.out.println()相比,BufferedOutputStream相对较慢(来自我读的)。

所以我试着用这种方式打印:

OutputStream out = new BufferedOutputStream (System.out);
out.write(sum);

由于sum属于int类型,out.write()以字节为单位打印。我试图将字节转换为十进制,这给了我一个编译错误说:

  

字节无法解除引用

所以,我的问题是:使用BufferedOutputStream以十进制格式打印整数值。

由于我在使用int打印BufferedOutputStream值时没有找到任何解决方案,我正在拼命寻找答案。

3 个答案:

答案 0 :(得分:3)

您遇到的问题是,在控制台上显示文本比生成它要慢得多。您可以使用缓冲区,如果重定向到文件,而不是屏幕,这将更快,但如果您实际在屏幕上显示它将不会更快。缓冲可以做的是减少滚动量,因为它一次写入文本而不是一行写入屏幕。

注意:BufferedOutputStream写入二进制而不是文本。它会更快,但不是人类可读的。如果你想要人类可读,我建议使用专门用来写文本的PrintWriter。

PrintWriter out = new PrintWriter(new BufferedWriter(
                                  new OutputStreamWriter(System.out, "UTF-8")));

// call many times
out.print(num);

// to flush the buffer so all the data can be read.
out.flush();

您可以使用StringBuilder,但这是;

  • 较慢,因为在创建整个字符串之前不显示文本。如上所述,显示文本是您的主要问题。
  • 使用尽可能多的内存作为输出,并且不能很好地扩展。

答案 1 :(得分:0)

希望这会有所帮助......

byte[] ascii = Integer.toString(sum).getBytes();

OutputStream console = new BufferedOutputStream(System.out);

try {

  console.write(ascii);

  console.flush();

} catch (IOException e) {

  e.printStackTrace();

}

但是你必须检查这段代码是否比

更快
System.out.println(sum);

答案 2 :(得分:-2)

使用BigInteger(字节),它将以BigInteger格式获取整数。