打印非常大的BigIntegers

我试图找出与Java 7 x64中的BigIntegers相关的以下问题。 我试图计算一个极高功率的数字。 代码如下,然后是问题描述。

import java.math.BigInteger; public class main { public static void main(String[] args) { // Demo calculation; Desired calculation: BigInteger("4096").pow(800*600) BigInteger images = new BigInteger("2").pow(15544); System.out.println( "The number of possible 16 bpc color 800x600 images is: " + images.toString()); } } 

我遇到打印此操作结果的问题。 当此代码执行时,它会打印消息,但不会打印images.toString()的值。

为了隔离问题,我开始计算2的幂,而不是在该行的注释中列出的所需计算。 在我测试过的两个系统上, 2^15544是触发问题的最小计算; 2^15543工作正常。

我没有接近达到主机系统的内存限制,我不相信我甚至接近VM限制(无论如何运行VM参数-Xmx1024M -Xms1024M都没有效果)。

在互联网上寻找答案之后,我开始怀疑我在BigIntegerString遇到限制,这些限制与这些类型用于内部数据存储的数组的最大大小( Integer.MAX_VALUE )有关。 如果问题出现在String我认为可以扩展BigInteger并编写一个打印方法,一次喷出几个字符,直到整个BigInteger被打印出来,但我宁愿怀疑问题出在其他地方。

感谢您抽出宝贵时间阅读我的问题。

问题是Eclipse中的Console视图的错误。

在我的设置中,Eclipse(Helios和Juno)在没有CRLF的情况下不能显示超过4095个字符的单行。 最大长度可能因字体选择而异 – 请参阅下文。

因此,即使以下代码也会显示问题 – 不需要BigInteger

 StringBuilder str = new StringBuilder(); for (int i = 0; i < 4096; i++) { str.append('?'); } System.out.println(str); 

也就是说,字符串实际上是在控制台中打印的 - 您可以将其复制出来。 它没有显示。

作为解决方法,您可以在控制台首选项中设置Fixed width console设置,该字符串将立即显示:

视图的首选

Eclipse的bugzilla上相应的错误是:

  • 当一行达到4096个字符时,在控制台中显示问题
  • Texteditor不能显示超过4095个字符的行。 限制在4096个字符。
  • 编辑器不显示长行

根据这些,这是一个Windows / GTK错误,Eclipse的开发人员无法做任何事情。

该错误与文本的长度是像素有关,使用较小的字体,您可以在文本中断之前获得更多字符。