2014-12-06 94 views
-1

我有一个大阵,我需要保存到磁盘下一个用户会话大整数的数组。我没有数据库或使用其中的选项。 当我将它们写入文本文件时,大量数据会占用更多空间吗? 什么是最好的方式来存储这个数组以备后用?BIGINT保存到文件

回答

0

我只是用一个普通的文本文件去找它,这个整数将占用尽可能多的空间作为它的字符串表示,所以2759275918572192759185721作为一个大整数将占用与2759275918572192759185721相同的空间作为一个字符串(它不是那么多)。

当从文件中读取它们,你只需再次解析。

重要:没有错误在此代码处理!你abosolutely必须添加try-catch-finally到ctahc IOException和NumberformatException!

File file = new File("C:\\Users\\Phiwa\\Desktop\\test.txt"); 

if(!file.exists()) 
    file.createNewFile(); 

FileWriter fw = new FileWriter(file); 

BigInteger bint1 = new BigInteger("999999999999999999"); 

fw.write(bint1.toString()); 

fw.flush(); 

fw.close(); 

// BigInteger has been written to file 


// Read it from file again 

BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(file))); 

String str = br.readLine(); 

br.close(); 

BigInteger bint2 = BigInteger.valueOf(Long.parseLong(str)); 

System.out.println(bint2); 

这个工程,你已经尝试过吗?

事情是有点不同的,如果你有在格式0x999999999999999整数,在这种情况下,你可以使用

BigInteger bint2 = new BigInteger(str.replace("0x", ""), 16); 
+0

哇感谢彻底反应。如果将数字保存到文本文件时,字符串就像字符串那样,将bigint转换为十六进制数,甚至更大的基数来保存存储空间会不会更好? – Geremy 2014-12-06 11:01:45

+0

当然,随意将其转换并使用六角形基座(应足够大)。在这种情况下,你可以使用我的最后一行将它读回到内存中,但即使我更喜欢十六进制,它也适用于所有基础。 – Phiwa 2014-12-06 11:06:08

+0

那么你会推荐Hex基地作为最佳做法吗?或者有没有一种转换能够在磁盘空间方面更高效? – Geremy 2014-12-06 11:10:07