【发布时间】:2017-11-17 11:39:01
【问题描述】:
我正在尝试将一个非常大的 BigInteger 打印到 .txt 文件中,但是当数字达到一定大小时,它什么也不打印。代码:
BigInteger bi = new BigInteger("16777216");
int exponent = 1000000;
bi = bi.pow(exponent);
String txtToPrint = bi.toString();
sendToFile(txtToPrint, "output.txt");
private static void sendToFile(String txtToPrint, String fileName) {
try {
FileWriter fileWriter = new FileWriter(fileName);
BufferedWriter bufferedWriter = new BufferedWriter(fileWriter);
bufferedWriter.write(txtToPrint);
bufferedWriter.close();
}
catch(IOException e) {
System.out.println("Error writing to file '" + fileName + "'");
}
}
只要指数大于 566,输出文件就是空的,而不是包含数字。目标是指数为 1 000 000,甚至更大。
我以为 BigInteger 没有大小限制,所以我的问题是:我超出了什么限制,有没有办法解决这个问题?
编辑:当试图刷新和关闭文件写入器时,我得到了这个异常:
java.io.IOException: Stream closed
at sun.nio.cs.StreamEncoder.ensureOpen(Unknown Source)
at sun.nio.cs.StreamEncoder.flush(Unknown Source)
at java.io.OutputStreamWriter.flush(Unknown Source)
at PrintInt.main(PrintInt.java:4
编辑:只有在 Eclipse 中运行程序时才会出现问题,我尝试将其导出到外部 jar,一切正常。我正在使用 Eclipse Mars.1 Release (4.5.1) 和 Java jre1.8.0_131 和 Cp1252 编码。
【问题讨论】:
-
仅供参考:我认为 BigInteger 没有大小限制数组的大小有限制,所以
Integer.MAX_VALUE(减去某个值)数字。但是有了这个指数,你应该没问题... -
我确实测试了你的代码,我的文件是正确的。7056KB...
-
@AxelH 你知道为什么它对你有用,而不是对我有用吗?
-
我在这里指的是
BufferWriter...
标签: java size limit biginteger