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

时间:2017-05-16 23:31:23

标签: java optimization 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需要很长时间(约一小时),有什么我可以做到加快速度并快速加载数字吗?

3 个答案:

答案 0 :(得分:7)

作为优化,由于BigIntegerSerializable,您可以将其保存到二进制文件一次,并大大加快您的加载速度。

加载序列化对象应该方式紧急 r,而不是每次解析一个巨大的字符串。

使用ObjectOutputStream保存您的大整数,并使用ObjectInputStream将其重新读入。

答案 1 :(得分:3)

它很慢,因为new BigInteger(String)正在进行从十进制到二进制的基数转换,即 O(N 2 。你无能为力。

您可以通过BigInteger.toByteArray()通过序列化或存储的字节数组保存对象本身。要么基本上都是实时加载的。

答案 2 :(得分:0)

正如评论所示,您的代码很慢,因为您尝试加载一个包含大量数字的数字。

如果您对Java BigInteger实施的表现不满意,那么我建议你去别处看看。

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

相关问题