如何快速将大型 txt 文件加载到 BigInteger 中?

How can I quickly load a large txt file into BigInteger?

我正在导入一个大文本文件,1700 万位长,我正在使用此代码:

BufferedReader reader = new BufferedReader(new FileReader("test2.txt"));
String line = reader.readLine();
System.out.println("Done");
BigInteger num = new BigInteger(line);
System.out.println("Done Again");

它几乎可以立即加载文件并打印出 'Done',但是将 String 转换为 BigInteger 需要很长时间(大约一个小时),是我可以做些什么来加快速度并快速加载号码?

如评论所述,您的代码速度很慢,因为您正试图加载一个包含很多数字的号码。

如果您对 Java 的 BigInteger 实施的性能不满意,那么我建议您看看其他地方。

This library 声称有一个 BigInteger 优于 Java 的实现(注意它可能不会加快加载数字的速度,但它应该会提高乘法和除法性能)。

作为一项优化,自 BigInteger is Serializable 以来,您可以将其保存到 二进制文件 一次并大大加快加载速度。

加载序列化对象应该比每次都解析一个巨大的字符串快。

使用ObjectOutputStream to save your big integer and ObjectInputStream读回。

它很慢,因为new BigInteger(String)正在做从十进制到二进制的基数转换,即O(N2) .你对此无能为力。

您可以通过序列化保存对象本身,或者通过 BigInteger.toByteArray() 保存它存储的字节数组。两者都将立即加载。