我正在导入一个大文本文件 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
需要很长时间(约一小时),有什么我可以做到加快速度并快速加载数字吗?
答案 0 :(得分:7)
作为优化,由于BigInteger
为Serializable
,您可以将其保存到二进制文件一次,并大大加快您的加载速度。
加载序列化对象应该方式紧急 r,而不是每次解析一个巨大的字符串。
使用ObjectOutputStream
保存您的大整数,并使用ObjectInputStream
将其重新读入。
答案 1 :(得分:3)
它很慢,因为new BigInteger(String)
正在进行从十进制到二进制的基数转换,即 O(N 2 )。你无能为力。
您可以通过BigInteger.toByteArray()
通过序列化或存储的字节数组保存对象本身。要么基本上都是实时加载的。
答案 2 :(得分:0)
正如评论所示,您的代码很慢,因为您尝试加载一个包含大量数字的数字。
如果您对Java BigInteger
实施的表现不满意,那么我建议你去别处看看。
This library声称BigInteger的性能优于Java的实现(注意它可能不会加快加载数量,但它应该可以提高乘法和除法性能。)