2014-12-06 26 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